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): 528    Accepted Submission(s): 150

    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


    思路:
    打个素数表,然后枚举b,判断a就够了。
    ps:汗,开始以为xat为正数,一直WA,原来题目说的是绝对值。

    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #define maxn 10000005
    using namespace std;
    
    int n,m,cxx,ans;
    bool vis[maxn];
    int prime[664580];
    
    void sieve(int nn)
    {
        int i,j,mm;
        mm=int(sqrt(nn+0.5));
        memset(vis,0,sizeof(vis));
        for(i=2;i<=mm;i++)
        {
            if(!vis[i])
            {
                for(j=i*i;j<=nn;j+=i)
                {
                    vis[j]=1;
                }
            }
        }
    }
    int get_prime(int nn)
    {
        int i,c=0;
        sieve(nn);
        for(i=2;i<=nn;i++)
        {
            if(!vis[i]) prime[c++]=i;
        }
        return c;
    }
    bool isprime(int x)
    {
        int i,j,t;
        t=sqrt(x+0.5);
        for(i=2;i<=t;i++)
        {
            if(x%i==0) return false ;
        }
        return true ;
    }
    int main()
    {
        int i,j,t,a,b,flag,sgn;
        cxx=get_prime(10000000);  // 664579
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            flag=0;
            if(n==0)
            {
                printf("2 2
    ");
                continue ;
            }
            if(n>0) sgn=1;
            else sgn=0,n=-n;
            for(i=0;i<cxx;i++)
            {
                b=prime[i];
                a=b+n;
                if(isprime(a))
                {
                    flag=1;
                    if(sgn) printf("%d %d
    ",a,b);
                    else printf("%d %d
    ",b,a);
                    break ;
                }
            }
            if(!flag) printf("FAIL
    ");
        }
        return 0;
    }




     
  • 相关阅读:
    今天辞职了
    数据库导出Excel
    2009.5重庆之行(二),5.23
    SQL远程连接操作
    上周入手WD500GB笔记本硬盘,上图
    [测试]Gridview绑定SqlDataReader+IList<T>和SqlDataAdapter+DataSet的效率
    SQL处理表重复记录(查询和删除)
    数据库导出excel (二)
    写了一个简单的手机号码正则
    SET XACT_ABORT 与 SET NOCOUNT的语法
  • 原文地址:https://www.cnblogs.com/pangblog/p/3310473.html
Copyright © 2011-2022 走看看