哈希打表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main()
{
int s[10000]={0},a,b,i,j;
for(i=2;i<10000;i++) //素数从2开始
if(s[i]==0)
for(j=i*i;j<10000;j+=i)
s[j]=1; //将素数的倍数(即非素数)都标记为1
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
if(s[i]==0)
printf("%d ",i);
return 0;
}

网上看到的一种方法

除2,3以外,所有的素数要么是6的倍数加1,要么减1;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
prime[2]=prime[3]=1;
for (int i=5; i<10000; i++)
{
if ((i+1)%6==0||(i-1)%6==0)
{
int j;
for (j=2; j<(int)(sqrt(i)+1); j++)
{
if (i%j==0)
break;
}
if (j==(int)(sqrt(i)+1))
prime[i]=1;
}
}

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

载入天数...载入时分秒... 本站使用 Volantis 作为主题 鲁ICP备-20012065号