华为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);
}
}
如果三个正整数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);
}
}
全部评论
相关推荐