等差素数列
题意
代码:
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
typedef long long LL;
set<int>all;
bool isPrime(LL t) {
for (int i = 2; i < t / 2; ++i) {
if (t % i == 0)return false;
}
return true;
}
int f(LL a[], int n) {
for (int i = 0; i < n; ++i) {
LL first = a[i];
for (int delta = 1; delta < a[n - 1] - first; ++delta) {
int m = first;
for (int j = 1; j < 10; ++j) {
m += delta;
if (all.find(m) == all.end())
break;
if (m > a[n - 1])break;
if (j == 9)
return delta;
}
}
}
return -1;
}
const int N = 5000;
LL a[N];
int main(int argc, const char *argv[]) {
a[0] = 2;
a[1] = 3;
all.insert(2);
all.insert(3);
int index = 2;
LL t = 5;
while (index < N) {
if (isPrime(t)) {
a[index++] = t;
all.insert(t);
}
t++;
}
cout << f(a, N) << endl;
return 0;
}