您的位置:首页 > 其它

筛选法求素数(求第t个素数是多少)

2017-04-05 21:15 204 查看
#include <cstdio>
#include <cmath>
#define N 10000000
#define T 100002
int a
;
int main()
{
int n,t=100002;
for(int i=1; i<=N; i++)  a[i]=1;
for(int i=2; i<=sqrt(N+1); i++)
{
for(int j=2*i; j<=N; j+=i)
{
a[j]=0;
}
}
int ans=0;
for(int i=2; i<=N; i++)
{
if(a[i]==1)
{
ans++;
if(ans==t)//求第t个素数是多少
{
printf("%d\n",i);
break;
}
}
}
return 0;
}

这个速度慢,效率低;

下面提供一种更快速的

bool a[20000000];
void prime()
{
a[2]=1;
for (i=3; i<=20000000; i+=2)
a[i]=1;
for(i=3;i<=sqrt(20000001);i+=2)
if (a[i])
for (j=i*i; j<=20000000; j+=(i<<1))//其中i<<1就是i乘以2的1次方,如果是1<<i就是1乘以2的i次方
a[j]=0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: