题目
有一个直角三角形三边为 A,B,C 三个整数。已知 C 为最长边长,求一组B,C,使得B和C最接近。
(题目链接)
分析
打表找规律。
或者直接一点的枚举 $C-B$ 的值。(既然枚举 B 不现实,枚举差值是一种很好的思路啊,学习了 %%% 博客)
或者使用费马大定理(的一小部分),
当 $A$ 为奇数时($A > 1$),存在 $C-B = 1$ 的整数解使得 $A^2 + B^2 = C^2$;
当 $A$ 为偶数时 ($A > 2$),存在 $C-B = 2$ 的整数解使得 $A^2 + B^2 = C^2$.
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, b, c; int main() { while(scanf("%lld", &a) == 1) { if(a & 1) { b = (a * a - 1) / 2; c = b + 1; } else { b = (a * a - 4) / 4; c = b + 2; } printf("%lld %lld ", b, c); } return 0; }
参考链接:
1. https://blog.csdn.net/david_jett/article/details/44750687