zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    idea安装好python后显示无SDK问题
    使用idea在windows上连接远程hadoop开发_配置环境
    最小二乘法估计----MATLAB最小二乘法求一元线性回归
    MATLAB最小二乘法求线性回归
    MATLAB求解线性规划(含整数规划和0-1规划)问题
    蒙特卡洛方法蒙特卡洛方法 matlab 实现 matlab 实现
    MATLAB神经网络实例及训练结果各参数解释
    单元格添加斜线
    ppt的高级设计法——虚实结合
    word中插入六角括号的方法﹝﹞
  • 原文地址:https://www.cnblogs.com/clliff/p/4743538.html
Copyright © 2011-2022 走看看