POJ 3006 Dirichlet's Theorem on Arithmetic Progressions(简单题)

来源:互联网 发布:windows 7 字体在哪 编辑:程序博客网 时间:2024/06/06 09:39

【题意简述】:求在满足题目要求的那个等差序列里的第n个素数是什么。

【分析】:思路很好建立,看代码吧,可能我写的很麻烦,复杂……唉。。

// 236K  94Ms#include<iostream>#include<cmath>using namespace std;#define N 10000bool isprime[N];    int prime[N],nprime;//prime[N]用来存储素数,nprime是此时一共有多少素数     void doprime(int n)    {        int i,j;        nprime = 1;        memset(isprime,true,sizeof(isprime));        isprime[1] = 0;            for(i = 2;i<=n;i++)        {            if(isprime[i])            {                prime[nprime++] = i;                for(j = i*i;j<=n;j+=i)                {                    isprime[j] = false;                }            }        }    }bool isp(int n) // 判断是否为素数{if(n == 1) return 0;int i;int k = (int)sqrt(double(n));for(i = 1;prime[i]<=k;i++)if(n%prime[i] == 0)return 0;return 1;}int main(){int a,d,c;doprime(N);while(cin>>a>>d>>c){int sum = 0;if(a == 0&&d == 0&&c == 0)break;for(int i = 0;;i++){if(isp(a+d*i))sum++;if(sum == c){cout<<a+d*i<<endl;break;}}}return 0;}


0 0