zoukankan      html  css  js  c++  java
  • ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)

      好歹我是数学专业的学生,还是要写写训练的时候遇到的数学问题滴~~

      在ACM集训的时候在各高校OJ上也遇见过挺多的数学问题,例如大数的处理,素数的各种算法,几何问题,函数问题(单调,周期等性质),甚至是各种数学定理或公式的变形。其实算法本身也属于数学研究的范畴(计算机本就是数学的衍生嘛),诸如众多排序算法,搜索算法也是许多精巧的数学逻辑思维,所以大家学计算机千万别忽视数学这门基础学科啊。


      貌似说了好多废话= =||,待小编进入正题,今天在湖大OJ训练赛上看到一道数学题,话不多说,直接上图!

    ____________________________看不懂英语滴孩纸们好好加油啊= =,小编这种英语渣渣看这种题都没查单词(⊙o⊙)||

      题目大意就是:

         计算三维坐标(x,y,z)满足xj+yj == zj公式的数量,其中x,y,z都是自然数(x<=y<=z<=m),j取所有2~n范围内的整数。

      分析:  我刚开始乍眼一看还以为涉及到大数乘法的相关算法,因为n可以取到100,m也可以取到100,这样想的话最大的数就有201位了= =。然后开始写代码了(好可恶的心理啊!!我居然这时候就急着写了!!),写到一半的时候就觉得很奇怪,好复杂啊~~要转成大数形式,又要乘法,还要判定相等,然后计数,估计得超时啊= =,而且如果涉及大数乘法为什么交代码的人AC百分比这么高~~。

      然后再想想,这尼玛不就是很久前的著名猜想嘛,现在想想初高中涉及勾股定理的时候有做过an+bn == cn在n=2的时候就不存在正整数可以满足这个关系了。

      其实这一题就是著名的费马大定理的变形(不知道的孩纸们自行百度),出题人真是照顾数学系的苦逼孩儿们啊= =


      让我先给大伙儿普及数学世上的世界三大数学猜想Oo(∩_∩)oO:

    • 费马猜想(费马猜想的证明于1994年由英国数学家-安德鲁·怀尔斯(Andrew Wiles)完成,称为费马大定理
    • 四色猜想(四色猜想的证明于1976年由美国数学家-阿佩尔(Kenneth Appel)与哈肯(Wolfgang Haken)借助计算机完成,称为四色定理
    • 哥德巴赫猜想(哥德巴赫猜想尚未解决,目前最好的成果(陈氏定理)乃于1966年由中国数学家陈景润取得。)

     


      所以,我们最后能想到用枚举法枚举这几种情况可以满足上面的等式

    • 枚举j==2时,所有满足这一等式的关系的情况,满足则sum++;
    • 枚举x=0时,y和z相等的情况,满足则sum++;

      所以我的代码如下:

     1 //费马大定理
     2 //Time:0 Ms
     3 #include<stdio.h>
     4 
     5 int main()
     6 {
     7     int m, n;
     8     int x, y, z;
     9     scanf("%d%d", &m, &n);
    10 
    11     int sum = 0;
    12     for (x = 0; x <= m; x++)    //第一枚举-j==2情况
    13     {
    14         for (y = x; y <= m; y++)
    15             for (z = y; z <= m; z++)
    16                 if (x*x + y*y == z*z)
    17                     sum++;
    18     }
    19 
    20     sum += (n - 2)*(m + 1);    //这一关系就是第二个枚举推导的
    21     printf("%d
    ", sum);
    22 
    23     return 0;
    24 }

      那么先这样了= =,下次再遇到再写下来分享吧

    ——————From 小墨

    他坐在湖边,望向天空,她坐在对岸,盯着湖面
  • 相关阅读:
    关于如何实现NSNotificationCenter在不同的VC对象之间发送通知
    关于iOS如何实现一个单例
    C++中级-类模板
    C++中级-文件读写
    C++中级-多态
    C++中级-继承
    C++中级-friend关键字访问类中private
    C++中级-(静态成员和对象丶this指针丶常函数和对象、成员函数和对象)
    C++中级-(构造函数,拷贝构造函数,析构函数)
    C++中级-类的封装
  • 原文地址:https://www.cnblogs.com/Inkblots/p/4713808.html
Copyright © 2011-2022 走看看