题目:
如果三个正整数A B C ,A2+B2=C2则为勾股数,且ABC之间两两互质。即A与B A与C B与C均互质没有公约数,则称其为勾股数元组。
请求出给定m n 范围内所有的勾股数元组。
输入描述:
起始范围 1<m<10000 m<n<10000
输出目描述:
abc 保证a<b<c输出格式 a b c
多组勾股数元组 按照a升序b升序 c升序的排序方式输出。给定范围内,找不到勾股数元组时,输出 NA。
例1: 例2:
输入: 输入:
1 20 10 20
输出: 输出:
3 4 5 NA
5 12 13
8 15 17
解:
#include<iostream>
using namespace std;
bool isUnique(int, int, int);
int main() {
int m, n, tmp;
cin >> m >> n;
if (m > n) {
tmp = m;
m = n;
n = tmp;
}
tmp = 0;
for (long int i = m; i < n; i++) {
for (long int j = i + 1; j < n; j++) {
for (long int k = j + 1; k < n; k++) {
if ((i*i + j * j) == k * k) {
if (isUnique(i, j, k)) {
cout << i << '-' << j << '-' << k << endl;
tmp++;
}
}
}
}
}
if (tmp == 0)
cout << "NA" << endl;
return 0;
}
bool isUnique(int i, int j, int k) {
int record = 0;
for (int u = 2; u <= i;u++) {
if (i / u != 0 && i%u == 0)
record++;
if (j / u != 0 && j%u == 0)
record++;
if (k / u != 0 && k%u == 0)
record++;
if (record == 3)
return false;
else
record = 0;
}
return true;
}
|