篩選法求素數

2021-07-06 11:02:19 字數 864 閱讀 4681

n素數的定義: n 不能夠被[2,sqrt(n)?]中任意乙個整數整除,則n是素數。

n用此方法找出不大於n的所有素數效率太低,下面介紹乙個求素數的經典演算法

——篩選法求素數

(1)準備:開闢乙個長度是10000的陣列isprime初始化為1

(2)篩選:i從2到100,做:若i是素數,劃去i的倍數,即isprime[2*i]、 isprime[3*i]…..置為0

(3)輸出:i從2到10000,做: 若isprime[i]==1, 則i是素數,輸出

思考:為何篩選一步迴圈是i從2到100而不是i從2到10000?

減少迴圈次數,增加運算速度

#include

#include

#define n 10000

int isprime[n+1];

void initprime()

}int main()

return0;}

/* 如果需要需要將所有素數存入乙個陣列以備其他函式使用,可用如下程式實現

*/#include

#include

#define n 10000

/*求n以內的素數,形引數組prm儲存所有素數,素數個數由函式返回*/

int prime (int prm)

}for(prmnum=0,i=2;i<=n;i++) /*掃瞄isprime陣列*/

return prmnum; /*返回素數個數*/

}int main()

}

篩選法求素數

題目 求100以內的所有素數。求素數的演算法常考,篩選法求素數不常見。定義長度為101的int陣列a 101 初始化為1。依次測試1到100的所有數字是否為素數。若i為合數,則a i 0。篩選完畢後,所有非0元素a i 所對應的數字i為素數。include using namespace std i...

篩選法求素數

篩選法求素數 質數 prime number 又稱素數。乙個 大於1的自然數 除了1和它本身外,不能被其他自然數 質數 整除,換句話說就是該數除了1和它本身以外不再有其他的因數 否則稱為合數 一 一般求素數的方法 乙個數n的因子不會超過n,但是如果我們知道數n的乙個因子a後,另乙個因子b b n a...

篩選法求素數

一 素數的定義 對於素數的定義,維基百科上給出如下一段話 素數指在大於1的自然數中,除了1和此整數自身外,無法被其他自然數整除的數。比1大但不是素數的數稱為合數。二 利用電腦程式,很容易就可以得到不太大的素數。以c語言為工具來描述常見的判斷素數的函式 int isprime int n 這個函式並不...