问题描述:勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形。已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。求满足这个条件的不同直角三角形的个数。附加条件:任意两个三角形不能是相似三角形。
思路:直角三角形公式:a^2+b^2=c^2.
任意两个三角形不能为相似三角形,就说明两个直角边的最大公约数为1.
#include<stdio.h>
#include<math.h>
int gcd(int x,int y) //y>x 辗转相除法求最大公约数
{
int r;
int m,n;
m=x;
n=y;
r=n%m;
while(r!=0)
{
n=m;
m=r;
r=n%m;
}
return m;
}
int main()
{
int a,b,c;
int count=0;
for(a=1;a<=100;a++)
{
for(b=a;b<=100;b++)
{
for(c=1;c<=100;c++)
if(a*a+b*b==c*c && gcd(a,b)==1) //如果最大公约数为1,输出
{
printf("%d %d %d\n",a,b,c);
count++;
}
}
}
printf("%d\n",count);
return 0;
}