トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

2006da2.cpp

#include <iostream>
#include <cmath>
#define MAX 1000000
using namespace std;

void furui(bool sosu[]) // 素数を求めておく
{
	sosu[0]=sosu[1]=false; // 0,1は素数じゃない
	for(int i=2; i<MAX; i++){ // 2以降を素数と仮定しておく
  		sosu[i]=true;
	}
	for(int i=2; i <(int)(sqrt((double)MAX)+1); i++){
		if (sosu[i]) { // 2以上に対し、素数だったら
			for(int j=i*2; j<MAX; j+=i){
				sosu[j]=false; // 2倍,3倍,4倍,・・を素数じゃなくする
			}
		}
	}
}

int main()
{
  int a, d, n;
  bool sosu[MAX];

  furui(sosu);

  while (true) {
    cin >> a >> d >> n;
	if (a==0 && d==0 && n==0) break;

    int ct=0;
    for(int i=a; ; i+=d){
      if(sosu[i]){
        ct++;
        if(ct==n){
          cout << i << endl;
          break;
        }
      }
    }
  }
  return 0;
}