您的位置:首页 > 其它

素数打表方法比较

2011-11-25 00:46 211 查看
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
;
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;
}


以上方式,在需要大量素数时下面一种比上面效率高的多。但在十万之内,效率都是很高的,基本无差别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: