题解中就在评论中给了个公式,不过评论中有人给了一个证明连接:http://codeforces.com/blog/entry/46681
看到毕达哥斯拉三元组,我想到一个题:poj 1305,这个题是枚举来做的,cf这题我也就枚举试了下,不行。。。
我的写法是看的别人结论:
当n被4整除时,结果是n/4 * 3和n/4 * 5
当n被2整除时,结果是((n/2) * (n/2)/2) * 2和((n/2) * (n/2)/2+1) * 2
当n是奇数时,结果是n * n/2和n * n/2+1,这个也对应了上边n被2整除时的情况。
后来想了一下上边这三种情况,当n是奇数的时候,得到的结果是打表可以找出来的。当n能够被4整除时,n是4的倍数,4对应的本原毕达哥斯拉三元组是3,4,5,这就一定能构造出一个3,4,5的倍数的毕达哥斯拉三元组,因为本原毕达哥斯拉三元组的整数倍也是毕达哥斯拉三元组。不能被4整除,却能被2整除的,除2后就是奇数的情况了。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL num;
int main()
{
cin >> num;
if(num < 3)
{
cout << -1 << endl;
return 0;
}
if(num%4 == 0)
{
cout << num/4*3 << " " << num/4*5 << endl;
}
else if(num%2 == 0)
{
cout << ((num/2)*(num/2)/2)*2 << " " <<((num/2)*(num/2)/2+1)*2 <<endl;
}
else
cout << num*num/2 << " " << num*num/2+1 << endl;
return 0;
}