Codeforces Round #368 (Div. 2) C. Pythagorean Triples

题解中就在评论中给了个公式,不过评论中有人给了一个证明连接: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值