先用一下欧拉素数筛,然后直接暴力枚举就行了。
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define MAX 1000000+7
int prime[MAX];
bool is_prime[MAX+1];
int solve(int n) {
int p=0;
fill(is_prime,is_prime+MAX+1,true);
is_prime[0]=false;
is_prime[1]=false;
for(int i=2; i<=n; ++i) {
if(is_prime[i]) {
prime[p++]=i;
}
for(int j=0;j<p && i*prime[j]<=n;++j){
is_prime[i*prime[j]]=false;
if(i%prime[j]==0) break;
}
}
return p;
}
int main(){
int a,d,n;
solve(MAX-1);
while(scanf("%d%d%d",&a,&d,&n)!=EOF){
if(a==0&&d==0&&n==0){
break;
}
int tt=0;
for(int i=a; ;i+=d){
if(is_prime[i]){
tt++;
}
if(tt==n){
cout<<i<<endl;
break;
}
}
}
return 0;
}