这道题还是挺打脑壳的;
因为如果以前遇见过类似的就应该知道这个结论:
那么三边就为:
如果n=0||1||2那么肯定没有三角形;
那么如果n为奇数的时候那么肯定就成立了;因为奇数*奇数==奇数;因为左边的两个/2不会向下取整了;
如果n为偶数,那么就需要把它给降下来;也就是这个东东;
因为n是和他的三边同时扩大这么多倍;因为一个偶数结果反复/2肯定会变成奇数 或者 4;所以根据这点就可以写了(其实讨论了0,1,2就会发现n肯定会反复/2降为一个奇数或者为4);
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,b,c,t=1;//t用来表示倍数
cin >> n;
if (n == 0 || n == 1 || n == 2)
{
puts("-1");
return 0;
}
while (n % 2 == 0&&n!=4)
{
n /= 2;
t *= 2;
}
if(n == 4)
{
cout << 3 * t<< ' ' << 5 * t << endl;
return 0;
}
b = (n*n - 1) / 2;
c = (n*n + 1) / 2;
cout << b * t << ' ' << c * t<<endl;
}