当前位置:   article > 正文

华为OD机试真题 勾股数元组 JavaScript java python c++ 参考解题_csdn勾股数练习

csdn勾股数练习

题目描述

如果三个正整数ABC ,A² + B² = C² 则为勾股数,

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

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

输入描述

起始范围

1 < n < 10000

n < m < 10000

输出描述

ABC保证A < B < C

输出格式A B C

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

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

示例一

输入

  1. 1
  2. 20

输出

  1. 3 4 5
  2. 5 12 13
  3. 8 15 17

示例二

输入

  1. 5
  2. 10

输出

Na

 参考解题

 javascript

  1. function gcd(a, b) {
  2. // 计算a和b的最大公约数
  3. while (b) {
  4. [a, b] = [b, a % b];
  5. }
  6. return a;
  7. }
  8. function main(n, m) {
  9. const results = [];
  10. for (let c = n + 1; c <= m; c++) {
  11. for (let b = n; b < c; b++) {
  12. const a2 = c * c - b * b;
  13. if (a2 <= 0) {
  14. break;
  15. }
  16. const a = Math.floor(Math.sqrt(a2));
  17. if (a * a === a2 && a < b && gcd(a, b) === 1) {
  18. results.push([a, b, c]);
  19. }
  20. }
  21. }
  22. if (results.length === 0) {
  23. console.log("Na");
  24. } else {
  25. results.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);
  26. for (const [a, b, c] of results) {
  27. console.log(`${a} ${b} ${c}`);
  28. }
  29. }
  30. }

java

  1. import java.util.*;
  2. public class PythagoreanTriples {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. int n = sc.nextInt();
  6. int m = sc.nextInt();
  7. List<int[]> results = new ArrayList<>();
  8. for (int c = n + 1; c <= m; c++) {
  9. for (int b = n; b < c; b++) {
  10. int a2 = c * c - b * b;
  11. if (a2 <= 0) {
  12. break;
  13. }
  14. int a = (int) Math.sqrt(a2);
  15. if (a * a == a2 && a < b && gcd(a, b) == 1) {
  16. results.add(new int[]{a, b, c});
  17. }
  18. }
  19. }
  20. if (results.size() == 0) {
  21. System.out.println("Na");
  22. } else {
  23. results.sort((a, b) -> a[0] - b[0] != 0 ? a[0] - b[0] : a[1] - b[1] != 0 ? a[1] - b[1] : a[2] - b[2]);
  24. for (int[] triple : results) {
  25. System.out.println(triple[0] + " " + triple[1] + " " + triple[2]);
  26. }
  27. }
  28. }
  29. public static int gcd(int a, int b) {
  30. while (b != 0) {
  31. int temp = a % b;
  32. a = b;
  33. b = temp;
  34. }
  35. return a;
  36. }
  37. }

python

  1. import math
  2. def gcd(a, b):
  3. while b != 0:
  4. a, b = b, a % b
  5. return a
  6. def main(n, m):
  7. results = []
  8. for c in range(n + 1, m + 1):
  9. for b in range(n, c):
  10. a2 = c * c - b * b
  11. if a2 <= 0:
  12. break
  13. a = int(math.sqrt(a2))
  14. if a * a == a2 and a < b and gcd(a, b) == 1:
  15. results.append((a, b, c))
  16. if len(results) == 0:
  17. print("Na")
  18. else:
  19. results.sort()
  20. for triple in results:
  21. print(triple[0], triple[1], triple[2])
  22. main(1, 170)

 c++

  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6. bool is_coprime(int a, int b) {
  7. return __gcd(a, b) == 1;
  8. }
  9. vector<tuple<int, int, int>> find_pythagorean_triples(int n, int m) {
  10. vector<tuple<int, int, int>> results;
  11. for (int c = n+1; c <= m; c++) {
  12. for (int b = n; b < c; b++) {
  13. int a = sqrt(c*c - b*b);
  14. if (a > n && a*a + b*b == c*c && is_coprime(a, b) && is_coprime(a, c) && is_coprime(b, c)) {
  15. results.push_back(make_tuple(a, b, c));
  16. }
  17. }
  18. }
  19. return results;
  20. }
  21. int main() {
  22. int n, m;
  23. cin >> n >> m;
  24. vector<tuple<int, int, int>> results = find_pythagorean_triples(n, m);
  25. if (results.empty()) {
  26. cout << "Na" << endl;
  27. }
  28. else {
  29. sort(results.begin(), results.end());
  30. for (auto result : results) {
  31. cout << get<0>(result) << " " << get<1>(result) << " " << get<2>(result) << endl;
  32. }
  33. }
  34. return 0;
  35. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/471813
推荐阅读
相关标签
  

闽ICP备14008679号