1,函数方法
#include <stdio.h>
#include <string.h>
#include <time.h>
#define N 10000000
int fun(int x)
{
int i;
for (i=2;i*i<=x;i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
freopen("out2.txt","w",stdout);
int j=0;
for(int i=2;i<=N;i++)
if(fun(i)) printf("%d ",i);
printf("\nTime used = %.21f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
2,快速方法
#include <stdio.h>
#include <string.h>
#include <time.h>
#define N 10000000
int a[N+1],s[N];
int main()
{
freopen("out.txt","w",stdout);
int j=0;
memset(a,0,sizeof(int));
for(int i=2;i<=N;i++)
if (a[i]==0)
{
s[j++]=i;
for(int k=2;;k++){
int m=k*i;
if(m>N) break;
a[m]=1;
}
}
for (i=0;i<j;i++) printf("%d ",s[i]);
printf("\nTime used = %.21f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
以上方式,在需要大量素数时下面一种比上面效率高的多。但在十万之内,效率都是很高的,基本无差别