本实验取材于郭炜老师的《程序设计与算法》
很多人都说判断素数是一个普通初学者算法,因此从不同的判断过程去理解判断素数是非常有必要的
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
cout << 2 << endl;
for(int i=3;i<=n;i+=2){
int k;
for(k=3;k<i;k+=2){
if(i%k==0)
break;
if(k*k>i)
break;
}
if(k*k>i) cout << i << endl;
}
return 0;
}
敲黑板:这段代码从3开始起步找素数,步长+2亮眼了,因此这段代码比最普通的步长+1的算法要好!
下面这段算法是筛素数法求解
#include<iostream>
using namespace std;
#define MAX_NUM 100000000
char isPrime[MAX_NUM + 10];
int main()
{
for(int i=2;i<=MAX_NUM;++i)
isPrime[i]=1;
for(int i=2;i<=MAX_NUM;++i){
if(isPrime[i])
for(int j=2*i;j<=MAX_NUM;j+=i)
isPrime[j]=0;
}
for(int i=2;i<=MAX_NUM;++i)
if(isPrime[i])
cout << i <<endl;
return 0;
}
这段代码使用了典型的空间换时间,也是进阶为高手的常用算法,必须背诵!