所谓勾股数,就是对于a,b,c,存在a*a+b*b=c*c。
为去除重复,可令a<b,并对100以内的a,b遍历。如果存在满足的等式关系的c,则输出。
代码如下:
int main(){
int a,b,c
for(a = 1 a <100 a++)
for(b = ab<100 b++)
{
int d = a*a+b*b
if(d > 10000) break
for(c = b+1 c<100 c++)
{
int e
e = c*c
if(e == d)
printf("%d,%d,%d\n",a,b,c)
if(e>=d) break
}
}
}
from __future__ import print_functionn=0
for i in range(1,50):
for j in range(i+1,50):
for k in range(j+1,50):
if i*i+j*j==k*k:
print("%2d,%2d,%2d "%(i,j,k),end='')
n+=1
if n==6:
print()
n=0
不得不说,楼上两位的算法有疏漏!请看看:k倍的(3,4,5)是否“都能”表示成(m*m-n*n,2*m*n,m*m+n*n)的形式?
本人的程序如下:
#include <stdio.h>
#include <math.h>
#define MAX 20000
int gcd(int a,int b)
{
int t
if(a>b) t=a,a=b,b=t
while(a)
{
t=a
a=b%a
b=t
}
return b
}
int main()
{
int i,j,n,total=0
n=(int)sqrt(MAX)
for (i=1i<=n++i)
{
for (j=1j<i++j)
{
if(((i+j)&1)&&gcd(i,j)==1)
total+=MAX/(i*i+j*j)
}
}
printf("Total: %d\n",total)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)