题目描述
* 题目:勾股数,是由三个正整数组成的数组;能符合勾股定理 a*a + b*b = c*c ,(a, b, c) 的正整数解。
* 如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数。
* 如果 (a, b, c) 互质,它们就称为素勾股数。
* 给定正整数N, 计算出小于或等于N的素勾股数个数。
* 输入描述:输一个正整数
* 输出描述:素勾股数
* 示例输入:10
* 示例输出:1
代码实现
/***************************************************************
* 题目:勾股数,是由三个正整数组成的数组;能符合勾股定理 a*a + b*b = c*c ,(a, b, c) 的正整数解。
* 如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数。
* 如果 (a, b, c) 互质,它们就称为素勾股数。
* 给定正整数N, 计算出小于或等于N的素勾股数个数。
* 输入描述:输一个正整数
* 输出描述:素勾股数
* 示例输入:10
* 示例输出:1
***************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
/* 判断两个数字是否互质,返回值是1时表明互质,其它值则不互质 */
int is_coprime(int src1,int src2)
{
if(0 == src2)
return src1;
else
return is_coprime(src2,src1%src2);
}
int main()
{
int input=0;
int i,j;
int a,b,c;
int countor=0;
scanf("%d",&input);
if(0 < input)
m = sqrt(input);
else
return -1;
for(i=1;i<=input;i++)
{
for(j=i+1;j<=input;j++)
{
a = j * j - i * i;
b = 2 * i * j;
c = i * i + j * j;
if(c <= input)
{
if(1 == is_coprime(a,b) && 1 == is_coprime(b,c) && 1 == is_coprime(a,c))
{
countor++;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
}
}
}
printf("%d\n",countor);
return 0;
}
测试描述
注意事项
编译时链接数学库,-lm