首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-10-24 
(DS1.5.5)POJ 3306 Dirichlets Theorem on Arithmetic Progressions(在一个数列之中寻找第n个素数)/* * PO

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

/* * 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;}

热点排行