• D. Taxes 哥德巴赫猜想


    http://codeforces.com/contest/735/problem/D

    这题其实我还不是很懂,那个只是猜想,然而却用了。

    只想说说找到第一小于n的素数这种思路是不行的。

    121 = 113 + 7 + 1,不能拆成1,但是答案是一样,。

    1354 = 1327 + 23 + 4       (27),这里错误了。

    这里还要判断如果n - 2是质数的话,就可以是2就够了,

    例如1000000011 = 1000000009(质数) + 2

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define IOS ios::sync_with_stdio(false)
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    int haha[44];
    bool check(int val) {
        if (val == 7 || val == 5 || val == 3 || val == 2) return true;
        if ((val + 1) % 6 != 0 && (val - 1) % 6 != 0) return false;
        int end = (int)sqrt(val);
        for (int i = 2; i <= end; ++i) {
            if (val % i == 0) return false;
        }
        return true;
    }
    int n;
    int mx = -inf;
    void work() {
        IOS;
        haha[2] = 1;
        haha[3] = 1;
        haha[4] = 2;
        haha[5] = 1;
        haha[6] = 2;
        haha[7] = 1;
        haha[8] = 2;
        haha[9] = 2;
        cin >> n;
    //    cout << n << endl;
        if (n <= 9) {
            cout << haha[n] << endl;
            return;
        }
        if (check(n)) {
            cout << "1" << endl;
            return;
        }
        if (check(n - 2) || check(n - 3) || check(n - 5) || check(n - 7)) {
            cout << "2" << endl;
            return;
        }
        if (n & 1) {
            cout << "3" << endl;
        } else cout << "2" << endl;
    }
    
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        work();
        return 0;
    }
    View Code

    哥德巴赫猜想是世界近代三大数学难题之一。哥德巴赫是德国一位中学教师,也是一位著名的数学家,生于1690年,1725年当选为俄国彼得堡科学院院士。1742年,哥德巴赫在教学中发现,每个不小于6的偶数都是两个素数(只能被1和它本身整除的数)之和。如6=3+3,12=5+7等等。
    公元1742年6月7日哥德巴赫(Goldbach)写信给当时的大数学家欧拉(Euler),提出了以下的猜想:
    (a) 任何一个>=6之偶数,都可以表示成两个奇质数之和。
    (b) 任何一个>=9之奇数,都可以表示成三个奇质数之和。
    这就是着名的哥德巴赫猜想。欧拉在6月30日给他的回信中说,他相信这个猜想是正确的,但他不能证明。叙述如此简单的问题,连欧拉这样首屈一指的数学家都不能证明,这个猜想便引起了许多数学家的注意。从费马提出这个猜想至今,许多数学家都不断努力想攻克它,但都没有成功。当然曾经有人作了些具体的验证工作,例如: 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5 = 3 + 7, 12 = 5 + 7, 14 = 7 + 7 = 3 + 11,16 = 5 + 11, 18 = 5 + 13, . . . . 等等。有人对33×108以内且大过6之偶数一一进行验算,哥德巴赫猜想(a)都成立。但验格的数学证明尚待数学家的努力。
    从此,这道著名的数学难题引起了世界上成千上万数学家的注意。200年过去了,没有人证明它。哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。到了20世纪20年代,才有人开始向它靠近。1920年、挪威数学家布爵用一种古老的筛选法证明,得出了一个结论:每一个比大的偶数都可以表示为(9 + 9)。这种缩小包围圈的办法很管用,科学家们于是从(9+9)开始,逐步减少每个数里所含质数因子的个数,直到最后使每个数里都是一个质数为止,这样就证明了“哥德巴赫”。
    目前最佳的结果是中国数学家陈景润於1966年证明的,称为陈氏定理(Chen's Theorem)——“任何充分大的偶数都是一个质数与一个自然数之和,而后者仅仅是两个质数的乘积。” 通常都简称这个结果为大偶数可表示为 “1 + 2 ”的形式。
    在陈景润之前,关於偶数可表示为 s 个质数的乘积与 t 个质数的乘积之和(简称“s + t ”问题)之进展情况如下:
    1920年,挪威的布朗(Brun)证明了 "9 + 9 "。
    1924年,德国的拉特马赫(Rademacher)证明了"7 + 7 "。
    1932年,英国的埃斯特曼(Estermann)证明了 "6 + 6 "。
    1937年,意大利的蕾西(Ricci)先后证明了"5 + 7 ", "4 + 9 ", "3 + 15 "和"2 + 366 "
    1938年,苏联的布赫夕太勃(亦译布赫斯塔勃)证明了"5 + 5 "。
    1940年,苏联的布赫夕太勃证明了 "4 + 4 "。
    1948年,匈牙利的瑞尼(Renyi)证明了"1 + c ",其中 c 是一很大的自然数。
    1956年,中国的王元证明了 "3 + 4 "。
    1957年,中国的王元先后证明了 "3 + 3 "和 "2 + 3 "。
    1962年,中国的潘承洞和苏联的巴尔巴恩(BapoaH)证明了 "1 + 5 ", 中国的王元证明了"1 + 4 "。
    1965年,苏联的布赫夕太勃和小维诺格拉多夫(BHHopappB),及意大利的朋比利(Bombieri)证明了"1 + 3 "。
    1966年,中国的陈景润证明了 "1 + 2 "。
    最终会由谁攻克 "1 + 1 "这个难题呢?现在还没法预测。

  • 相关阅读:
    Android学习之简单的数据存储
    Android学习Tabhost、gallery、listview、imageswitcher
    Android学习之菜单
    Android学习之Notification
    android自定义控件
    Android简单登录系统
    Android学习自定义Dialog
    Android学习之DialogFragment
    Intent组件
    git
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6109044.html
Copyright © 2020-2023  润新知