题目连接:4715 Difference Between Primes
题目大意:给出n个x, 0 <= x <= 10^6, 求a、b(均为素数), a - b = x, 输出a和b。
解题思路:将2 ~ 10^6 + 10以内的素数表求出, 对应的去匹配pri[i] + x是否为素数, 这里我借用了stl里面的set.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <set>
using namespace std;
const int N = 1000005;
int n, pri[N];
set<int> s;
bool isPrime(int cur) {
int t = sqrt(cur);
for (int i = 2; i <= t; i++)
if (cur % i == 0)
return false;
return true;
}
void Init() {
memset(pri, 0, sizeof(pri));
s.clear();
n = 0;
for (int i = 2; i < N; i++)
if (isPrime(i)) {
pri[n++] = i;
s.insert(i);
}
}
int find(int cur) {
for (int i = 0; i < n; i++){
if (pri[i] + cur >= N) break;
if (s.find(pri[i] + cur) != s.end()) return pri[i];
}
return 0;
}
int main() {
int cas, order;
Init();
scanf("%d", &cas);
while (cas--) {
scanf("%d", &order);
int t = find(order);
if (t)
printf("%d %d\n", t + order, t);
else
printf("FAIL\n");
}
return 0;
}