1. 程式人生 > >輸入正整數n(n>=2),求不大於n的全部質數(素數)

輸入正整數n(n>=2),求不大於n的全部質數(素數)

質數(prime number)又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數。 比如:2、3、5、7、11、13、17、19······ 2、3、5、7、11、13、17、19
#include <iostream>
using namespace std;
int main()
{
int n; cin>>n;
cout<<2<<endl;
for(int i=3;i<=n;i+=2){//除了2之外,只需要遍歷所有的奇數i是否滿足條件即可
int k;//這裡的k做測試使用
for(k=3;k<i;k+=2){
if(i%k==0)
break;
if(k*k>i) //當 k 大於 i的平方根後就不要再試了
break;
}
if(k*k>i)
cout<<i<<endl;

}

return 0;

}

****************************************************** 方法二: //篩選法求素數
/*利用空間(記憶體)去換時間 
1.把所有的數初始化(假設)為素數
2.通過for遍歷把每一個素數的倍數都標記為非素數
3.剩下的數就都是素數了 
*/
#include <iostream>
using namespace std;
#define max_num100
char isPrimer[max_num+10];
int main(){
for (int i=2;i<=max_num;++i)//把所有的數初始化(假設)為素數
isPrimer[i] = 1;
for (int i=2;i<=max_num;++i){//通過for遍歷把每一個素數的倍數都標記為非素數
if(isPrimer[i]){
for(int j = 2*i;j<=max_num;j+=i)//依次為2,3,4,。。。的倍數,標記為非素數 
isPrimer[j] = 0;//把素數i的倍數標記為非素數 
}
}
for(int i=2;i<=max_num;++i){
if(isPrimer[i]){
cout <<i<<endl;
}
}
return 0;
}