Codeforces 707 C. Pythagorean Triples(找规律)——Codeforces Round #368 (Div. 2)

传送门

Katya studies in a fifth grade. Recently her class studied right triangles and the

Pythagorean theorem. It appeared, that there are triples of positive integers such that you

can construct a right triangle with segments of lengths corresponding to triple. Such

triples are called Pythagorean triples.

For example, triples (3, 4, 5), (5, 12, 13) and (6, 8, 10) are Pythagorean triples.

Here Katya wondered if she can specify the length of some side of right triangle and find

any Pythagorean triple corresponding to such length? Note that the side which length is

specified can be a cathetus as well as hypotenuse.

Katya had no problems with completing this task. Will you do the same?

Input

The only line of the input contains single integer n(1n109) — the length of some

side

of a right triangle.

Output

Print two integers m and k (1m,k1018) such that n, m and k form a Pythagorean

triple, in the only line.

In case if there is no any Pythagorean triple containing integer n, print  - 1 in the only line.

If there are many answers, print any of them.

Examples

input

3

output

4 5

input

6

output

8 10

input

1

output

-1

input

17

output

144 145

input

67

output

2244 2245

题目大意:

给你一个数,让你判断这个数是不是能够满足勾股数,如果满足输出另外两条边,否则输出 1 .

解题思路:

因为让我们输出任意一组数据,所以我们特判一下就行了:

假设是奇数的话:那么是 2n+1  2n2+2n  2n2+2n+1 ,然后判断一下子就行了。

假设是偶数的话:那么是 2n  n21  n2+1 ,然后判断一下就行了。

My Code

/**
2016 - 08 - 19 上午
Author: ITAK

Motto:

今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。
**/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 1e9+5;
const int MAXN = 1e5+5;
const int MOD = 1e9+7;
const double eps = 1e-7;
const double PI = acos(-1);
using namespace std;
LL Scan_LL()///输入外挂
{
    LL res=0,ch,flag=0;
    if((ch=getchar())=='-')
        flag=1;
    else if(ch>='0'&&ch<='9')
        res=ch-'0';
    while((ch=getchar())>='0'&&ch<='9')
        res=res*10+ch-'0';
    return flag?-res:res;
}
int Scan_Int()///输入外挂
{
    int res=0,ch,flag=0;
    if((ch=getchar())=='-')
        flag=1;
    else if(ch>='0'&&ch<='9')
        res=ch-'0';
    while((ch=getchar())>='0'&&ch<='9')
        res=res*10+ch-'0';
    return flag?-res:res;
}
void Out(LL a)///输出外挂
{
    if(a>9)
        Out(a/10);
    putchar(a%10+'0');
}

int main()
{
    LL n;
    while(cin>>n)
    {
        if(n == 1LL || n==2LL)
        {
            puts("-1");
            continue;
        }
        if(n & 1)
        {
            LL tmp = (n-1)/2;
            cout<<2*tmp*tmp+2*tmp<<" "<<2*tmp*tmp+2*tmp+1<<endl;
        }
        else
        {
            LL tmp = n*n/4; 
            if(tmp <= 1)
                puts("-1");
            else
                cout<<tmp-1<<" "<<tmp+1<<endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值