摘要:这题本身简单,但是暴力破解很可能超过时间界.最好的选择是采取素数筛法,以空间换时间,这样所有的素数都可以用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;
}