給定 A > B ≥ 0,若 A+B 和 A-B 都是完全平方數,則稱 (A,B) 為自然數對。輸入 T 組測試數據,每組輸出 YES 或 NO。A+B ≤ 2^31。
計算整數平方根 `r = (int)sqrt(x)`,若 `r*r == x` 則為完全平方數。需包含 `
#include <stdio.h>
#include <math.h>
int is_perfect_square(int m);
int main() {
int n, a, b;
scanf("%d", &n);
while (n--) {
scanf("%d %d", &a, &b);
if (is_perfect_square(a-b) && is_perfect_square(a+b))
printf("YES");
else
printf("NO");
if (n > 0) printf("\n");
}
return 0;
}
int is_perfect_square(int m) {
int r = (int)sqrt(m);
return r * r == m;
}
輸入:
2 17 8 3 1
輸出:
YES NO
17+8=25=5²,17-8=9=3² → YES。3+1=4=2²,3-1=2 非平方數 → NO。
此類數對與勾股數相關:設 A+B=x², A-B=y² → A=(x²+y²)/2, B=(x²-y²)/2。x,y 同奇偶性時 A,B 為整數。