ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)

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

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


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

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

ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)

  题目大意就是:

     计算三维坐标(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++;

  所以我的代码如下:

 //费马大定理
//Time:0 Ms
#include<stdio.h> int main()
{
int m, n;
int x, y, z;
scanf("%d%d", &m, &n); int sum = ;
for (x = ; x <= m; x++) //第一枚举-j==2情况
{
for (y = x; y <= m; y++)
for (z = y; z <= m; z++)
if (x*x + y*y == z*z)
sum++;
} sum += (n - )*(m + ); //这一关系就是第二个枚举推导的
printf("%d\n", sum); return ;
}

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

——————From 小墨

上一篇:BZOJ4614 UVA1742 Oil 计算几何+搜索+扫描线


下一篇:图片未完成加载显示loading