定义了一个素数对的概念,就是如果p是素数的话,p+2也是素数的话,那么(p,p+2)就是一组素数对;
那么我们在打素数表的时候,顺便判断i-2是否是素数即可;
#include<iostream>
#include<cstring>
#include<cmath>
#define ll unsigned long long //数据太大,这个比long long还大
#define MAXN 100010
#define maxn 20000010
using namespace std;
bool vis[maxn];
ll a[MAXN];//p
ll b[MAXN];//p+2
ll kase = 0;
void checkprime(ll n) {//素数打表
memset(vis, true, sizeof(vis));
vis[0] = vis[1] = false;
for(ll i = 2; i <= n; i++) {
if(vis[i]) {
if(vis[i-2]) {
++kase;
a[kase] = i - 2;
b[kase] = i;
}
for(ll j = i*i; j <= n; j+=i) {
vis[j] = false;
}
}
if(kase >= 100000) break;//如果个数够了就break,题目要求
}
}
int main() {
ll n;
checkprime(maxn);
while(~scanf("%lu", &n)) {
printf("(%lu, %lu)\n", a[n], b[n]);
}
return 0;
}