华为机试——素勾股数
题目描述
* 题目:勾股数,是由三个正整数组成的数组;能符合勾股定理 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 ",a,b,c); } } } } printf("%d ",countor); return 0; }
测试描述
注意事项
编译时链接数学库,-lm
上一篇:
Java基础知识总结(2021版)
下一篇:
Redis 面试题汇总(不定期更新)