素勾股数
来源:互联网 发布:美国最新经济数据今晚 编辑:程序博客网 时间:2024/06/01 09:57
以下的方法可用来找出勾股数。设 m > n 、 m 和 n 均是正整数,
若 m 和 n 是互质,而且 m 和 n 其中有一个是偶数,计算出来的 (a, b, c) 就是素勾股数。(若 m 和 n 都是奇数, (a, b, c) 就会全是偶数,不符合互质。)
所有素勾股数可用上述列式当中找出,这亦可推论到数学上存在无穷多的素勾股数。
例子[编辑]
小于 100 的素勾股数列表:
让我们把上述列式重组至以下列式:
有些勾股数组可以有同一个最小的勾股数。第一个例子是 20 ,它在以下两组勾股数之中出现:(20, 21, 29) 与 (20, 99, 101)。
其中最先例子是5,它在以下两组勾股数之中出现(3,4,5)及(5,12,13)。
在 15,386 组素勾股数的 1229779565176982820 ,它的最小与最大的勾股数组是:
与
试考虑它的质因数分解
它质因数的个数涉及不少素勾股数。当然,数学上存在比它大的素勾股数。
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <string.h>
using namespace std;
typedef long long ll;
const ll maxn = 1e9+7;
ll n,used[1000000+10];
ll gcd(int x,int y)
{
if(x%y==0)
{
return y;
}
else
{
return gcd(y,x%y);
}
}
main()
{
while(~scanf("%d",&n))
{
ll a,b,c;
ll cnt = 0,cntused = 0;
memset(used,0,sizeof(used));
for(int i=1; i<=sqrt(n+0.5); i++)
{
for(int j=i+1; j*i<=n; j+=2)
{
if(gcd(i,j)==1)
{
a=j*j-i*i;
b=2*i*j;
c=i*i+j*j;
if(c<=n)
{
cnt++;
if(!used[a])
{
used[a]=1;
cntused++;
}
if(!used[b])
{
used[b]=1;
cntused++;
}
if(!used[c])
{
used[c]=1;
cntused++;
}
}
for(int k=2; k*c<=n; k++)
{
if(!used[k*a])
{
used[k*a]=1;
cntused++;
}
if(!used[k*b])
{
used[k*b]=1;
cntused++;
}
if(!used[k*c])
{
used[k*c]=1;
cntused++;
}
}
}
}
}
// cout<<cntused<<endl;
cout<<cnt<<" "<<n-cntused<<endl;
}
}
- 素勾股数
- uva 106 - Fermat vs. Pythagoras(素勾股数)
- UVA106- Fermat vs. Pythagoras(素勾股数)
- UVa 106 - Fermat vs. Pythagoras 素勾股数
- UVA106 - Fermat vs. Pythagoras(素勾股数)
- UVA 106 - Fermat vs. Pythagoras (勾股数和素勾股数)
- 应用部门的培训材料
- 牛客网_华为机试_017_坐标移动
- bootstrap前端框架的简单基本使用
- 图解Android
- easyar unity3d播放视频
- 素勾股数
- QString 与 QByteArray 互换
- Mac VMware fusion nat 外网映射
- css--spirit
- Hadoop 2.0生态圈技术简介
- STL空间配置器
- launch文件基础
- gradle安装配置指路
- 文章标题