PKU 3006 Dirichlet's Theorem on Arithmetic Progressions

  • 素数
  • TLEがきついためおそらくエラトステネスの篩が必須
int main() {
#define MAX (1024*1024)
	static bool flag[MAX];
	memset(flag, -1, sizeof(flag));
	flag[0] = flag[1] = false;
	for (int i = 2; i * i < MAX; ++i){
		if (!flag[i]){
			continue;
		}
		for (int j = i * i; j < MAX; j += i){
			flag[j] = false;
		}
	}

	for (int a, d, n; cin >> a >> d >> n && (a || d || n); ) {
		int counter = 0;
		int value;
		for (value = a; ; value += d) {
			if (flag[value]) {
				++counter;
			}

			if (counter == n) {
				break;
			}
		}

		cout << value << endl;
	}
}