#include <stdio.h>
#include <math.h>
bool isPrime(int num) {
if (1 == num) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int getNthPrime(int num, int d, int n) {
int primeNum = 0;
for (int i = 0; primeNum <= n; i++) {
if (isPrime(num + d*i)) {
primeNum++;
if (primeNum == n) {
printf("%d\n", num + d*i);
return num + d*i;
}
}
}
}
int main() {
while(1) {
int num = 0, d = 0, n = 0;
scanf("%d %d %d", &num, &d, &n);
if (0 == num && 0 == d && 0 == n) {
break;
}
getNthPrime(num, d, n);
}
#include <math.h>
bool isPrime(int num) {
if (1 == num) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int getNthPrime(int num, int d, int n) {
int primeNum = 0;
for (int i = 0; primeNum <= n; i++) {
if (isPrime(num + d*i)) {
primeNum++;
if (primeNum == n) {
printf("%d\n", num + d*i);
return num + d*i;
}
}
}
}
int main() {
while(1) {
int num = 0, d = 0, n = 0;
scanf("%d %d %d", &num, &d, &n);
if (0 == num && 0 == d && 0 == n) {
break;
}
getNthPrime(num, d, n);
}
}
没想到暴力法也accept了。 原来想先筛出一张大素数表。g++ AC.
注意:
1.编译带 -lm 才能用sqrt
2. prime检测也是常用的, 熟练并记住.
数论啥时侯再看看, 一开始还以为能用数论的什么定理来简化,但看了圈discuss, 貌似没有.