(DS1.5.5)POJ 3306 Dirichlet's Theorem on Arithmetic Progressions(在一个数列之中寻找第n个素数)

来源:互联网 发布:yy网络直播红人 编辑:程序博客网 时间:2024/05/20 05:27
/* * 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;}