c编程,寻找勾股数

来源:百度知道 编辑:UC知道 时间:2024/06/30 20:58:54
若c*c == a*a + b*b ;我们就把它们叫做勾股数;
如何较快的找到这种组合的数呢?比如1000以内有多少种这样的数呢?
(附:(3,4,5),(5,12,13),(6,8,10),(7,24,25)...是较常见的勾股数)
有没有好一点的算法?不要暴力破解的,这样很浪费时间!!!

算法多得是:
1.用数论知识做可以:a是奇数.
勾股方程的最简解可以表示为:(a,b,c)=(st, (s^2-t^2)/2, (s^2+t^2)/2)其中s,t是奇数且互质.求出最简解所有解就可以表示为(a',b',c')=(ka,kb,kc)
2.介于求1000以内,可以只循环a和b,然后判断a^2+b^2是不是完全平方数.
3.可以循环枚举a,然后把a^2因子分解来做.

void main()
{
int i,j,k;
for(i=1;i<1000;i++)
for(j=i;j<1000;j++)
for(k=j;k<1000;k++)
if(k*k==i*i+j*j)
{
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
}

1.用数论知识做可以:a是奇数.
勾股方程的最简解可以表示为:(a,b,c)=(st, (s^2-t^2)/2, (s^2+t^2)/2)其中s,t是奇数且互质.求出最简解所有解就可以表示为(a',b',c')=(ka,kb,kc)
2.介于求1000以内,可以只循环a和b,然后判断a^2+b^2是不是完全平方数.

勾股数可以用下面的3个数来表示参数为(x,y,k)(x>y,x,y互质)
a=k(x*x+y*y);b=k(x*x-y*y);c=k(2*xy).比如x=2,y=1,k=1表示的就是(3,4,5)
只要寻找到合适的k,x,y就可以求出a了,其中判断的条件只是a<1000.