【分析】
对于直角三角形△ABC,如图:

我们知道的是

因为题目说如果题目存在多种解,输出任何一个就可以了,所以我们不妨假设输入的n是一条直角边的长度,那么

根据平方差公式可得

那么,这个时候,我们要求解的就是a,b
于是乎,我们分类讨论即可

【时间复杂度&&优化】
O(1)
代码:
#include<cstdio>
#define LL __int64
int main()
{
LL n;
scanf("%I64d",&n);
if(n==1||n==2) //特殊考虑
printf("-1\n");
else //结论
{
if(n*n%2==1)
printf("%I64d %I64d\n",(n*n+1)/2,(n*n-1)/2);
else
printf("%I64d %I64d\n",(n*n+4)/4,(n*n-4)/4);
}
return 0;
}

本文介绍了一个算法,用于根据给定的正整数n找到一组勾股数,即能够构成直角三角形三边长度的三个正整数。文章提供了一种有效的方法来解决这个问题,并附带了一个简单的C++代码实现。
454

被折叠的 条评论
为什么被折叠?



