/*
* POJ_3006.cpp
*
* Created on: 2013年10月23日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 10011;//不要开得太大,否则会超时
bool u[maxn];//判断某一个数是否是素数
int su[maxn];//素数表
int num = 0;//素数的个数
//产生素数表.需要注意的是,1不是素数
void prepare() {
int i, j;
memset(u, true, sizeof(u));
for (i = 2; i < maxn; ++i) {
if (u[i]) {
su[++num] = i;
}
for (j = 1; j <= num; ++j) {
if (i * su[j] > maxn) {
break;
}
u[i * su[j]] = false;
if (i % su[j] == 0) {
break;
}
}
}
}
//判断一个数是否是素数
bool pri(int x) {
if (x <= 10010) {
return u[x];
}
int i;
for (i = 1; i <= num; ++i) {
if (x % su[i] == 0) {
return false;
break;
}
}
return true;
}
int main(){
prepare();
int a,d,n;
u[1] = false;//1不是素数
while(scanf("%d%d%d",&a,&d,&n)!=EOF,a||d||n){
int m;
int cnt = 0;
for(m = a ; cnt < n ; m+=d){
if(pri(m)){
cnt++;
}
}
printf("%d\n",m-d);
}
return 0;
}
(DS1.5.5)POJ 3306 Dirichlet's Theorem on Arithmetic Progressions(在一个数列之中寻找第n个素数)
最新推荐文章于 2020-09-25 15:32:58 发布