华为OD 机试卷-勾股数

题目描述
如果三个正整数A、B、C ,A² + B² = C² 则为勾股数,

如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,则称其为勾股数元组。

请求出给定 n ~ m 范围内所有的勾股数元组。

输入描述
起始范围

1 < n < 10000

n < m < 10000

输出描述
ABC保证A < B < C

输出格式A B C

多组勾股数元组,按照A B C升序的排序方式输出。

若给定范围内,找不到勾股数元组时,输出Na。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int m = in.nextInt();
            boolean found = false;
            for (int i = n; i <= m; i++) {
                for (int j = i + 1; j <= m; j++) {
                    int k = (int) Math.sqrt(i * i + j * j);
if (k > m) {
                        break;
                    }
                    if (k * k == i * i + j * j) {
                        if (gcd(i, j) == 1 && gcd(j, k) == 1) {
                            System.out.printf("%d %d %d\\n", i, j, k);
                            found = true;
                        }
                    }
                }
            }
            if (!found) {
                System.out.println("Na");
            }
        }
    }

    private static int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务