• HDU 4715 Difference Between Primes (素数表+二分)


    Difference Between Primes

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2998    Accepted Submission(s): 850


    Problem Description
    All you know Goldbach conjecture.That is to say, Every even integer greater than 2 can be expressed as the sum of two primes. Today, skywind present a new conjecture: every even integer can be expressed as the difference of two primes. To validate this conjecture, you are asked to write a program.
     
    Input
    The first line of input is a number nidentified the count of test cases(n<10^5). There is a even number xat the next nlines. The absolute value of xis not greater than 10^6.
     
    Output
    For each number xtested, outputstwo primes aand bat one line separatedwith one space where a-b=x. If more than one group can meet it, output the minimum group. If no primes can satisfy it, output 'FAIL'.
     
    Sample Input
    3
    6
    10
    20
     
    Sample Output
    11 5
    13 3
    23 3
     
    Source
     
     
    题意:求两个素数的差为一个偶数的素数组合,如果存在多个,输出小的
    分析:打出素数表,然后从小的开始枚举,二分查找就行。不过很奇怪的是,我一开始没有看到要加FAIL竟然也过了,也是醉的不行。
    #pragma comprint(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<map>
    #include<stdlib.h>
    #include<ctime>
    #include<algorithm>
    #define LL __int64
    #define FIN freopen("in.txt","r",stdin)
    using namespace std;
    const int MAXN=5000000;
    int pri[MAXN],vis[MAXN];
    int x,cnt;
    void sieve(int n)
    {
        int m=(int)sqrt(n+0.5);
        memset(vis,0,sizeof(vis));
        for(int i=2;i<=m;i++) if(!vis[i])
            for(int j=i*i;j<=n;j+=i) vis[j]=1;
    }
    int init(int n)
    {
        sieve(n);
        cnt=0;
        for(int i=2;i<=n;i++) if(!vis[i])
            pri[++cnt]=i;
    }
    int main()
    {
        //FIN;
        init(MAXN);
        int kase;
        scanf("%d",&kase);
        while(kase--)
        {
            bool flag=false;
            scanf("%d",&x);
            for(int i=1;i<cnt;i++)
            {
                int id=lower_bound(pri+1,pri+cnt,pri[i]+x)-pri;
                if(pri[id]==pri[i]+x)
                {
                    printf("%d %d
    ",pri[id],pri[i]);
                    flag=true;
                    break;
                }
            }
            if(!flag) printf("FAIL
    ");
        }
        return 0;
    }
    View Code
     
  • 相关阅读:
    python中神之bug
    常用好的软件
    远程登录
    centos7改静态ip
    SpringMVC归纳
    mysql数据库操作手册
    MyBatis归纳
    Maven归纳
    maven操作手册
    java知识库
  • 原文地址:https://www.cnblogs.com/clliff/p/4743538.html
Copyright © 2020-2023  润新知