数论 —— 毕达哥拉斯三元组
生活随笔
收集整理的這篇文章主要介紹了
数论 —— 毕达哥拉斯三元组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【定義】
滿足??的??三元組稱為畢達哥拉斯三元組,當? 時,稱其為本原的。
畢達哥拉斯三元組,也稱為勾股數。
【性質】
由 x、y、z 構成的三元組 (x,y,z) ,其中 y 為偶數,那么由他們構成的本原的畢達哥拉斯三元組
等價于:
存在互素的一奇一偶的正整數 m、n,且 m>n,有:,并且可以看出,本原的畢達哥拉斯三元組中,最大的數一定是奇數。
特別地,由??構成畢達哥拉斯三元組,將??即得
【實現】
求解 n 以內本原的畢達哥拉斯三元組個數
根據 ,只要枚舉一下 m、n(m,n<=sqrt(n)),然后將三元組乘以 i (保證 i*z 在范圍內),即可求出所有的畢達哥拉斯三元組。
int x[N],y[N],z[N]; int pythagoras(int n){int num=0;//數組游標int res=0;//本原三元組的個數int m=sqrt(n*1.0);for(int i=1;i<=m;i+=2){//從1開始,每次+2,保證為奇數for(int j=2;j<=m;j+=2){//從2開始,每次+2,保證為偶數a=max(i,j);//大的為mb=min(i,j);//小的為nif(gcd(i,j)!=1)//要求m、n互質continue;x[num]=a*a-b*b;y[num]=2*a*b;z[num]=a*a+b*b;num++;if( (a*a+b*b)<=n )//保證在范圍內res++;}}return res; }【例題】
- Fermat vs. Pythagoras(POJ-1305)(畢達哥拉斯三元組):點擊這里
總結
以上是生活随笔為你收集整理的数论 —— 毕达哥拉斯三元组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理论基础 —— 二叉树 —— 树、森林、
- 下一篇: C++语言基础 —— 函数