您的位置:首页 > 其它

poj3006

2015-09-11 12:02 183 查看

摘要:这题本身简单,但是暴力破解很可能超过时间界.最好的选择是采取素数筛法,以空间换时间,这样所有的素数都可以用O(1)的时间测出来.

#include "stdafx.h"
#include "iostream"
using namespace std;
bool Isprime[1000005];

void Find(int a,int d,int n)
{
int x = a - d,count = 0;
while(count<=n-1)
{
x += d;
if(Isprime[x] == true)
{
count++;
}
}
cout<<x<<endl;
}
int main()
{
int a,d,n,k=0;
int Prime[100000];
memset(Isprime,true,sizeof(Isprime));
Isprime[1] =false;
Prime[k++] = 2;
for(int i = 1;i<=1000000;i ++ )
{
while(Isprime[i] == false)//找到第一个未删除的素数
{
i++;
}
Prime[k++] = i;
for(int j = i*2;j<=1000000;j += i )
Isprime[j] = false;
}
while(1)
{
int t =0,count = 0;
cin>>a;
cin>>d;
cin>>n;
if((a||d||n) ==0)
break;

Find(a,d,n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: