zoukankan      html  css  js  c++  java
  • POJ2262 Goldbach's Conjecture

    Description

    In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture: 
    Every even number greater than 4 can be 
    written as the sum of two odd prime numbers.

    For example: 
    8 = 3 + 5. Both 3 and 5 are odd prime numbers. 
    20 = 3 + 17 = 7 + 13. 
    42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.

    Today it is still unproven whether the conjecture is right. (Oh wait, I have the proof of course, but it is too long to write it on the margin of this page.) 
    Anyway, your task is now to verify Goldbach's conjecture for all even numbers less than a million. 

    Input

    The input will contain one or more test cases. 
    Each test case consists of one even integer n with 6 <= n < 1000000. 
    Input will be terminated by a value of 0 for n.

    Output

    For each test case, print one line of the form n = a + b, where a and b are odd primes. Numbers and operators should be separated by exactly one blank like in the sample output below. If there is more than one pair of odd primes adding up to n, choose the pair where the difference b - a is maximized. If there is no such pair, print a line saying "Goldbach's conjecture is wrong."
     
    题意:就是让你把某个数拆分成两个两个质数相加的形式从而证明哥德巴赫猜想,如果不能证明就输出,哥德巴赫猜想是错的。
     
    题解:我是先把数据范围内的质数都用欧拉筛筛了出来,然后枚举一下,如果要拆分的数减去某一个质数后的数也是质数,就输出。对于第二种情况,
    显然不存在就不用管了,注意输出格式,这道题一开始我的评测显示“Presentation Error”,后来上网查是输出格式错误,长知识哦。
    后来在网上看到有人用试除法做也A了,好水哦。
     
     
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 
     8 int n,is_prime[1000005],prime[1000005],cnt;
     9 
    10 inline void ou_prime(int x)
    11 {
    12     for(int i=2;i<=x;i++)
    13     {
    14         if(is_prime[i]==0) is_prime[i]=i,prime[++cnt]=i;
    15         for(int j=1;j<=cnt;j++)
    16         {
    17             if(i*prime[j]>x||is_prime[i]<prime[j]) break;
    18             is_prime[i*prime[j]]=prime[j];
    19         }
    20     }
    21 }
    22 
    23 int main()
    24 {
    25     ou_prime(1000000);
    26     while(1)
    27     {
    28         scanf("%d",&n);
    29         if(n==0) return 0;
    30         for(int i=1;i<=cnt;i++)
    31            if(is_prime[n-prime[i]]==n-prime[i])
    32            {
    33                    printf("%d = %d + %d
    ",n,prime[i],n-prime[i]);
    34                    break;
    35            }
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    codeforces707B:Bakery
    codeforces707A:Brain's Photos
    BZOJ1084 [SCOI2005]最大子矩阵
    BZOJ1264 [AHOI2006]基因匹配Match
    BZOJ2764 [JLOI2011]基因补全
    codevs1257 打砖块
    BZOJ1079 [SCOI2008]着色方案
    BZOJ1026 [SCOI2009]windy数
    菜鸟学自动化测试(一)----selenium IDE
    关于w3school的html5部分output 元素实例代码(点亲自试一试进去)的问题纠正
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11384927.html
Copyright © 2011-2022 走看看