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

2006da1.c

#include <stdio.h>
#include <math.h>

// xが素数かどうか判定する関数(素数のとき1、じゃないとき0)
int sosu(int x)
{
	int i,flag;
	
	if(x<2){ // マイナス、0,1は素数じゃない
		return 0;
	}else if(x==2){ // 2は素数
		return 1;
	}else if(x%2==0){ // 2の倍数は素数じゃない
		return 0;
	}else{
		flag=1; // フラグを立てる
		for(i=3; i<=sqrt(x); i+=2){ // 割れるかどうかはルートnまで調べればよい
			if(x%i==0){
				flag=0; // 割れる数があったらフラグ消す
				break;
			}
		}
		if(flag){ // フラグがたっていたら素数
			return 1;
		}else{
			return 0;
		}
	}
}

main()
{
	int a,d,n,ct,p;
	unsigned long i;
	
	while(1){
		scanf("%d %d %d", &a, &d, &n);
		if(a==0 && d==0 && n==0) break;
		
		// ct:素数の数をカウント
		// i:数列の数(初期値a, dずつ増えていく)
		//  終わる条件はカウントがn未満のとき
		ct=0;
		for(i=a; ct<n; i+=d){
			if(sosu(i)){ // iが素数だったらカウント
				ct++;
				p=i;
			}
		}
		printf("%d\n", p);
	}
	
	return 0;
}