zoukankan      html  css  js  c++  java
  • 一本通1622Goldbach’s Conjecture

    1622:Goldbach’s Conjecture

    时间限制: 1000 ms         内存限制: 524288 KB

    【题目描述】

    原题来自:Ulm Local,题面详见:POJ 2262

    哥德巴赫猜想:任何大于 44 的偶数都可以拆成两个奇素数之和。 比如:

    8=3+5
    20=3+17=7+13
    42=5+37=11+31=13+29=19+23

    你的任务是:验证小于 106 的数满足哥德巴赫猜想。

    【输入】

    多组数据,每组数据一个 n

    读入以 0 结束。

    【输出】

    对于每组数据,输出形如 n=a+b,其中 a,b 是奇素数。若有多组满足条件的 a,b,输出 b−a 最大的一组。

    若无解,输出 Goldbachs conjecture is wrong.

    【输入样例】

    8
    20
    42
    0

    【输出样例】

    8 = 3 + 5
    20 = 3 + 17
    42 = 5 + 37

    【提示】

    数据范围与提示:

    对于全部数据,6≤n≤106 。

    sol:欧拉筛筛出素数后暴力枚举

    #include <bits/stdc++.h>
    using namespace std;
    typedef int ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int N=1000005;
    int n;
    int Prim[N];
    bool Bo[N];
    inline void Pre_Prime()
    {
        int i,j;
        for(i=2;i<=1000000;i++)
        {
            if(!Bo[i]) Prim[++*Prim]=i;
            for(j=1;j<=*Prim&&Prim[j]*i<=1000000;j++)
            {
                Bo[Prim[j]*i]=1;
                if(i%Prim[j]==0) break;
            }
        }
        return;
    }
    int main()
    {
        int i;
        Pre_Prime();
        while(true)
        {
            bool Flag=0;
            if(!(n=read())) break;
            for(i=2;i<=*Prim&&Prim[i]<n;i++) if(!Bo[n-Prim[i]])
            {
                printf("%d = %d + %d
    ",n,Prim[i],n-Prim[i]);
                Flag=1;
                break;
            }
            if(!Flag)puts("Goldbach's conjecture is wrong.");
        }
        return 0;
    }
    /*
    input
    8
    20
    42
    0
    output
    8 = 3 + 5
    20 = 3 + 17
    42 = 5 + 37
    */
    View Code
  • 相关阅读:
    GIT基础详解
    JS进阶解析
    JS基础解析
    CSS布局模型解析
    02.CentOS Linux 7.7 系统配置文档
    docker 创建bridge网络和修改默认网段
    selenium浏览器自动化测试工具 进阶使用
    前端导出Excel和打印介绍
    stm32使用gmtime()转换timestamp为日期,出的结果是乱的,不符合预期。改为localtime正常输出
    .net core api action 不能用作 httpget注释的参数名
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10425765.html
Copyright © 2011-2022 走看看