尤拉計劃386題(反鏈的最大長度) 論壇c++解法學習筆記
這是stubbscroll的帖子,他也沒有把程式碼貼全。我補充了生成最小質因數部分。有趣的是,如果生成的不是最小質因數,也能出正確答案,速度也差不多。要使生成的不是最小質因數,把for(int j=i*i; j<=N; j+=i*((i>2)?2:1))
的步長改為j+=i
。這樣會把12的最小質因數2用3覆蓋。divs原來是向量,我改為陣列後,放在main函式內,會執行出錯,因此移動到外面。
#include<vector> #include<cstdio> #include<cmath> #include<ctime> using namespace std; #define N 100000000 #define P(X) printf("%s %ldms\n",X,clock()-t);fflush(stdout); int divs[N+1]= {0}; int main() { int t=clock(); //vector<int> divs = genPrimes(N, true); // minimal divisors divs[1]=1; for(int i=2; i<=sqrt(N); i++)//i+=(i>2)?2:1) slower if(divs[i]==0) { for(int j=i*i; j<=N; j+=i*((i>2)?2:1)) divs[j]=i; divs[i]=i; } for (int i = 2; i <= N; ++i) if(divs[i]==0)divs[i]=i;//prime's fact is itself P("gen prime min factor done"); vector<int> degs(N + 1); vector< vector<int> > byDegs(30); degs[1] = 0; byDegs[0].push_back(1); for (int i = 2; i <= N; ++i) { degs[i] = degs[i / divs[i]] + 1; byDegs[degs[i]].push_back(i); } P("gen degress done"); long long ans = 0; for (int i = 0; i < 29; ++i) { int low = 0, high = byDegs[i].size() - 1; while (low < byDegs[i].size()) { while (high >= 0 && (long long)byDegs[i][high] * byDegs[i][low] > N) { --high; } ans += high + 1; ++low; } low = 0, high = byDegs[i + 1].size() - 1; while (low < byDegs[i].size()) { while (high >= 0 && (long long)byDegs[i + 1][high] * byDegs[i][low] > N) { --high; } ans += high + 1; ++low; } } printf("%lld\n", ans); P("all done") } --正確最小質因數 D:\>a gen prime min factor done 1903ms gen degress done 4056ms 528755790 all done 5319ms --不正確最小質因數 D:\>a A 2730ms gen prime min factor done 2979ms gen degress done 5257ms 528755790 all done 6552ms
上述j+=i*((i>2)?2:1)
只能保證偶數不被覆蓋,參考了stubbscroll發的前一貼,還要加上if(divs[j]==0)
才能保證所有最小質因數都不被覆蓋。但反正算錯也能出正確答案,這個條件不加也行。
相關文章
- 尤拉計劃386題(反鏈的最大長度) 論壇python解法學習筆記Python筆記
- 論壇發貼統計(筆記)筆記
- javaScript 學習計劃以及筆記JavaScript筆記
- 尤拉計劃695:隨機長方形隨機
- 尤拉計劃512題(冪的尤拉總計函式和)函式
- 用尤拉計劃題目來學q語法
- 學習態度和學習計劃
- orientDB學習筆記(一)六度分隔理論筆記
- 《SQL 反模式》 學習筆記SQL模式筆記
- 【遊戲設計筆記】遊戲設計師的一些自用學習網站/論壇/書籍筆記遊戲設計師學習網站
- 學習進度條__軟體工程概論第二週學習計劃軟體工程
- 學習進度條__軟體工程概論第一週學習計劃軟體工程
- 學習進度條__軟體工程概論第三週學習計劃軟體工程
- 學習進度條__軟體工程概論第六週學習計劃軟體工程
- 學習進度條__軟體工程概論第五週學習計劃軟體工程
- 學習進度條__軟體工程概論第七週學習計劃軟體工程
- C++學習筆記C++筆記
- 群論學習筆記筆記
- iOS學習筆記01 textfield 限定輸入的文字長度iOS筆記
- 360星計劃學習筆記-如何學好JavaScript筆記JavaScript
- 學習筆記----圖論學習中筆記圖論
- 可以發外鏈的論壇,哪些論壇可以發外鏈?
- 學習進度條__軟體工程概論第四周學習計劃軟體工程
- 學習自己搭建論壇
- Linux 學習筆記--任務計劃 crontabLinux筆記
- C++學習筆記——003C++筆記
- c++學習筆記(四)C++筆記
- c++學習筆記(五)C++筆記
- OI學習筆記(C++)筆記C++
- c++學習筆記(三)C++筆記
- 【區塊鏈學習】《區塊鏈學習指南》學習筆記區塊鏈筆記
- 資訊理論理論學習筆記筆記
- input最大長度限制問題
- 尤拉計劃595題:增量隨機排序隨機排序
- 尤拉計劃425題:質數連線
- 機率論 學習筆記筆記
- 尤拉計劃463題:奇怪的遞迴關係遞迴
- 【統計學習方法|筆記】第1章 統計學習方法理論筆記