解法
小さいほうから原始ピタゴラス数を検討するだけです。
原始ピタゴラス数のk倍の辺をもつ三角形は高さがk倍の差になるので条件を満たしません。
原始ピタゴラス数のもととなるm,n(Wikiの記述に準拠)はmが定まれば今回の条件を満たすnは決まるのでmを小さいほうから試します。
#include<stdio.h>
#include<set>
#include<algorithm>
#include<iostream>
__int64
gcd ( __int64 a, __int64 b )
{
__int64 c;
while ( a != 0 ) {
c = a; a = b%a; b = c;
}
return b;
}
int main(){
int c=0;
__int64 ans=0;
__int64 m=2;
__int64 r=1;
__int64 n;
while(c<12){
while(5*m*m-1>r*r){
r++;
}
if(5*m*m-1==r*r){
n=-2*m+r;
if((gcd(m,n)==1)&&(m-n)%2==1){
c++;
ans+=(m*m+n*n);
}
}
while(5*m*m+1>r*r){
r++;
}
if(5*m*m+1==r*r){
n=-2*m+r;
if((gcd(m,n)==1)&&(m-n)%2==1){
c++;
ans+=(m*m+n*n);
}
}
m++;
}
std::cout<<"\nans="<<ans<<"\n";
}
最終更新:2015年11月30日 21:38