外层循环枚举公差d的值,从1到999,内层循环枚举首项i的值,从2到4999。最内层循环枚举等差数列中的10个数,如果这10个数都是素数,则输出公差d的值,即等差数列的公差最小值。如果这10个数中有一个不是素数,则退出最内层循环,继续枚举下一个等差数列。如果枚举完所有的等差数列,都没有找到长度为10的等差素数列,则程序结束。
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i < sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
bool a[50000];
for (int i = 0; i < 50000; i++) {
a[i] = isPrime(i);
}
for (int d = 1; d < 1000; d++) {
for (int i = 2; i < 5000; i++) {
bool flag = true;
for (int j = 0; j < 10; j++) {
if (!a[i + d * j]) {
flag = false;
break;
}
}
if (flag) {
cout << d << endl;
break;
}
}
}
return 0;
}