アットウィキロゴ

Dirichlet's Theorem on Arithmetic Progressions

1141 : Dirichlet's Theorem on Arithmetic Progressions



解説

与えられた等差数列のn番目の素数を答える問題。
答えが100万よりも小さくなると問題文に書いてあるので、エラトステネスの篩を使って100万個分の配列をあらかじめ作っておけばOK。

プログラム

C


C++

#include <iostream>
using namespace std;
 
const int MAX = 1000000;
bool prime[MAX+1];
void func(int n) {
    if (prime[n]) return;
 
    for (int i = n*2; i <= MAX; i += n) {
        prime[i] = true;
    }
}
 
int main(){
    for (int i = 2; i*i <= MAX; i++) {
        func(i);
    }
    prime[1] = true;
 
    int a, d, n;
    while (cin >> a >> d >> n, a || d || n) {
        int cnt = 0;
        for (int i = a;; i += d) {
            if (!prime[i]) cnt++;
            if (cnt == n) {
                cout << i << endl;
                break;
            }
        }
    }
     
 
    return 0;
}

Java

最終更新:2012年12月06日 21:29