C语言中求解勾股数最快的算法程序

来源:百度知道 编辑:UC知道 时间:2024/05/11 04:12:07
勾股数为整数,如3.4.5称为一组。重复的如3.4.5和5.3.4算为一组。若要求20000以内有多少组这种勾股数,哪种算法效率最高,请贴出你的源代码。周日6:00前我电脑上运行最快且程序答案正确的拿分。
C#我没有编译器;
前两个程序答案不正确;
匿名的程序达人,虽然子函数if语句没有起到作用,但还是很佩服你。

不得不说,楼上两位的算法有疏漏!
请看看: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=1;i<=n;++i)
{
for (j=1;j<i;++j)
{
if(((i+j)&1)&&gcd(i,j)==1)
total+=MAX/(i*i+j*j);
}
}
printf("Total: %d\n",total);
return 0;
}

楼上的,输出很耗时间,哈哈
#include<stdio.h>
#include<math.h>

#define MAX_N 20000

int main(int argc, char* argv[])
{
int i,j,res=0;
int i_n = (int)(sqrt(MAX_N) + 1);
for(i=2;i<i_n;++i)
{
for(j=1;j<i;++j)
if(i*i+j*j<MAX_N)
{
res++;