UVA

来源:互联网 发布:诺兰蝙蝠侠三部曲知乎 编辑:程序博客网 时间:2024/05/17 06:46

定义了一个素数对的概念,就是如果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 20000010using namespace std;bool vis[maxn];ll a[MAXN];//pll b[MAXN];//p+2ll 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;}
原创粉丝点击