首先寫出推法求質的程式,思想就是拿前面的質數來確定當前驗證的數字為合數。從而,將為確定為合數的數確定為質數,逐漸的加到陣列裡。
推法求質:
#include #include #include using namespace std;
ifstream cin("zhi.in");
ofstream cout("zhi.out");
int main(int argc, char *ar**)
; int n, i, j, x;
bool f;
cin >> n;
x = 0;
for ( i = 2 ; i <= n ; i++ )
if ( f )
s[x++] = i;
}cout << s[0];
for ( i = 1 ; i < x ; i++ )
if ( s[i] )
cout << " " << s[i];
cout << endl << x << endl;
//system("pause");
return exit_success;
}
然後是篩法求質,思想就是,要把所有的質數的倍數篩掉(即篩掉合數)。從而留下的就都是質數。
#include #include using namespace std;
ifstream cin("zhi.in");
ofstream cout("zhi.out");
int main(int argc, char *ar**)
; int n, i, j;
cin >> n;
for ( i = 2 ; i <= n ; i++ )
s[i] = 1;
for ( i = 2 ; i <= n ; i++ )
if (s[i] == 1)
for (j = 2 * i ; j <= n ; j += i)
s[j] = 0;
cout << 2;
for ( i = 3 ; i <= n ; i++ )
if ( s[i] )
cout << " " << i;
cout << endl;
//system("pause");
return exit_success;
}
兩種質數求法 篩法 推法
首先寫出推法求質的程式,思想就是拿前面的質數來確定當前驗證的數字為合數。從而,將為確定為合數的數確定為質數,逐漸的加到陣列裡。推法求質 include include include using namespace std ifstream cin zhi.in ofstream cout zhi....
普通質數篩法
二 埃氏篩 三.尤拉篩法 4.質數距離 從暴力的直接迴圈開始,一步步對演算法進行優化,一步步簡化時間複雜度,並盡可能討論各種篩法的優劣,以及其中每一步的意義。思路直接,容易被像我們這樣的新手第一時間想到,乙個質數,除了1和它本身以外不再有其他因數,那麼想知道乙個數是不是質數,乾脆直接去看看它有幾個因...
質數線性篩法 O n
埃氏篩法o nloglogn 仍會重複標記合數 such as i 2時 12 2 6,先會被 2 標記已是合數 i 3時 12 3 4,又被標記了一次 我們在生成乙個需要標記的合數時,每次只向現有的數中乘上乙個質因子,並且讓它是所生成合數的最小質因子 code include include us...