首页 > 其他 > 详细

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

时间:2016-08-22 23:00:56      阅读:153      评论:0      收藏:0      [点我收藏+]

给定一个直角三角形的一边长度。问是否存在一个直角三角形,使得它满足有一边的长度是x

当x=1、2的时候是无解的,可以暴力打表看看。

注意到,相邻的两个数的平方的差值是奇数

x^2 - (x-1)^2 = 2*x-1

间隔为2的两个数的平方的差值是偶数

(x+1)^2 - (x-1)^2 = 4*x

这样就可以分类讨论了。

把n永远当成是指角边就OK

技术分享
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>

void work ()
{
    LL n;
    cin>>n;
    if (n==1 || n==2 )
    {
        cout<<-1<<endl;
        return ;
    }
    LL t = n*n;
    if (t&1)
    {
        LL k = (n*n+1)>>1;
        cout<<k<<" "<<k-1<<endl;
    }
    else
    {
        LL k = t>>2;
        cout<<k+1<<" "<<k-1<<endl;
    }
}
int main()
{
#ifdef local
    freopen("data.txt","r",stdin);
#endif
    work();
    return 0;
}
View Code

 

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

原文:http://www.cnblogs.com/liuweimingcprogram/p/5797052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!