素數線性篩選

2021-07-23 02:32:17 字數 548 閱讀 6965

#include#include#includeusing namespace std; 

bool isprime[10000001];

int pri[2000001],prin;

int findprime ( int maxn )

for(int j=0;jmaxn )

break; //當過大了就跳出

isprime[ i * pri[ j ] ] = 0;

printf("sai:%d*%d=%d\n",i,pri[j],i*pri[j]);

//篩去素數

if( i % pri[ j ] == 0 ) break;

//這裡是關鍵,如果i是乙個合數(這當然是允許的)而且i mod prime[j] = 0

//那麼跳出,因為i*prime[ (- over -)j ]一定已經被篩去了,被乙個素因子比i小的數

//比乙個合數數大的——"質數和該合數的乘積"可用乙個更大的合數和比其小的質數相乘得到。}}

} int main()

線性篩選素數

侵刪。題目 給出乙個正整數n,列印出所有從1 n的素數 即質數 關鍵是要找出乙個判斷乙個正整數n是否為素數的方法 傻瓜解法 n,n 2 1 include2 int main 3 12 這裡迴圈取到sqrt n 效率改進不少了 但顯然還是不夠理想 繼續往下看 普通篩選法 埃拉託斯特尼篩法 先簡單說一...

素數的線性篩選

出處 線性篩選法之所以稱之為線性就是因為其對於每乙個合數只用其最小的素因子將其篩選出來。如下 include include include define maxn 1000000 using namespace std int p 1000005 pri 1000005 idx 1 void ge...

線性篩選素數法

pri 1到pri n遞增,composite num1 n 在遍歷 1,n 的數時,剛好maxdivisor1 pri 3 pri 4 pri n 1 pri n。pri 1是是它最小的質因數。maxdivisor如果乘以乙個大於pri 3的質因數,例如pri 4,就找到另乙個合數 composi...