赞
踩
如果三个正整数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
。
- 1
- 20
- 3 4 5
- 5 12 13
- 8 15 17
- 5
- 10
Na
- function gcd(a, b) {
- // 计算a和b的最大公约数
- while (b) {
- [a, b] = [b, a % b];
- }
- return a;
- }
-
- function main(n, m) {
- const results = [];
- for (let c = n + 1; c <= m; c++) {
- for (let b = n; b < c; b++) {
- const a2 = c * c - b * b;
- if (a2 <= 0) {
- break;
- }
- const a = Math.floor(Math.sqrt(a2));
- if (a * a === a2 && a < b && gcd(a, b) === 1) {
- results.push([a, b, c]);
- }
- }
- }
-
- if (results.length === 0) {
- console.log("Na");
- } else {
- results.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);
- for (const [a, b, c] of results) {
- console.log(`${a} ${b} ${c}`);
- }
- }
- }
-

- import java.util.*;
-
- public class PythagoreanTriples {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
-
- List<int[]> results = new ArrayList<>();
-
- for (int c = n + 1; c <= m; c++) {
- for (int b = n; b < c; b++) {
- int a2 = c * c - b * b;
- if (a2 <= 0) {
- break;
- }
- int a = (int) Math.sqrt(a2);
- if (a * a == a2 && a < b && gcd(a, b) == 1) {
- results.add(new int[]{a, b, c});
- }
- }
- }
-
- if (results.size() == 0) {
- System.out.println("Na");
- } else {
- 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]);
- for (int[] triple : results) {
- System.out.println(triple[0] + " " + triple[1] + " " + triple[2]);
- }
- }
- }
-
- public static int gcd(int a, int b) {
- while (b != 0) {
- int temp = a % b;
- a = b;
- b = temp;
- }
- return a;
- }
- }

- import math
-
- def gcd(a, b):
- while b != 0:
- a, b = b, a % b
- return a
-
- def main(n, m):
- results = []
- for c in range(n + 1, m + 1):
- for b in range(n, c):
- a2 = c * c - b * b
- if a2 <= 0:
- break
- a = int(math.sqrt(a2))
- if a * a == a2 and a < b and gcd(a, b) == 1:
- results.append((a, b, c))
- if len(results) == 0:
- print("Na")
- else:
- results.sort()
- for triple in results:
- print(triple[0], triple[1], triple[2])
-
- main(1, 170)

- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <algorithm>
-
- using namespace std;
-
- bool is_coprime(int a, int b) {
- return __gcd(a, b) == 1;
- }
-
- vector<tuple<int, int, int>> find_pythagorean_triples(int n, int m) {
- vector<tuple<int, int, int>> results;
- for (int c = n+1; c <= m; c++) {
- for (int b = n; b < c; b++) {
- int a = sqrt(c*c - b*b);
- if (a > n && a*a + b*b == c*c && is_coprime(a, b) && is_coprime(a, c) && is_coprime(b, c)) {
- results.push_back(make_tuple(a, b, c));
- }
- }
- }
- return results;
- }
-
- int main() {
- int n, m;
- cin >> n >> m;
-
- vector<tuple<int, int, int>> results = find_pythagorean_triples(n, m);
-
- if (results.empty()) {
- cout << "Na" << endl;
- }
- else {
- sort(results.begin(), results.end());
- for (auto result : results) {
- cout << get<0>(result) << " " << get<1>(result) << " " << get<2>(result) << endl;
- }
- }
-
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。