Pythagorean Triples

CodeForces - 707C

悉宇大大最近在学习三角形和勾股定理。很显然,你可以用三个边长为正数的线段去构造一个直角三角形,而这三个数被称作“勾股数”。

比如,(3,4,5),(5,12,13),(6,8,10)都是勾股数。

现在悉宇大大很好奇如果他能够确定直角三角形的某一条边,那么他能否找到另外两条边使得这三条边组成直角三角形。注意,他所确定的边可以是直角边也可以是斜边。

悉宇大大能够轻松的解决这个问题,你也可以吗?

Input

输入一个整数n(1 ≤ n ≤ 109) ——直角三角形的一边的长度

Output

在一行里输出两个整数m,k(1 ≤ m, k ≤ 1018),使得(n,m,k)为勾股数。

如果找不到任何勾股数包含n,那么输出-1。如果有多个答案,输出任意一个。

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

sol:虽然是小学奥数,但还是蛮有趣的。
容易知道两个相邻的平方数的差就是按照3,5,7,9,11...这样排下去的,所以如果读入的数字不是2的倍数,那么就一直除到变成奇数,然后求出这个奇数的平方在前面那个序列中的位置,再把2乘回去就可以得到b,c
如果是2的幂次,观察3,4,5,按照这个比例构造另外两条边即可
Ps:方法应该挺多的,希望有大佬提供更好的qaq
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
int main()
{
long long a,b,c,Base=;
R(a);
if(a<) return *puts("-1");
while(a%==)
{
a/=;
Base*=;
}
if(a>)
{
long long tmp=a*a;
b=(tmp-)/;
c=b+;
b*=Base;
c*=Base;
W(b); Wl(c);
}
else
{
b=Base/*;
c=Base/*;
W(b); Wl(c);
}
return ;
}
/*
input
3
output
4 5 input
6
output
8 10 input
1
output
-1 input
17
output
144 145 input
67
output
2244 2245
*/
 

codeforces707C的更多相关文章

  1. codeforces707C:Pythagorean Triples

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

  2. Codeforces 707C. Pythagorean Triples-推公式的数学题

    两道C题题解,能推出来公式简直是无敌. http://codeforces.com/problemset/problem/707/C codeforces707C. Pythagorean Tripl ...

随机推荐

  1. Vue-发布订阅机制(bus)实现非父子组件的传值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. WPF PasswordBox不支持绑定解决方法

    原文:WPF PasswordBox不支持绑定解决方法 PasswordBox的Password属性因为安全原因不支持直接绑定,可以使用依赖属性实现.直接插入代码 public class Passw ...

  3. 【C#复习总结】垃圾回收机制(GC)1

    摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...

  4. 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0

    前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...

  5. 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData

    1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既 ...

  6. Pandas基础使用

    Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的. 1.导入pandas import pandas as pd 2.pandas数据类型: 1)Series:一维数据类型 ...

  7. AtCoder Beginner Contest 122 D - We Like AGC (DP)

    D - We Like AGC Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Yo ...

  8. Jeecg-Boot Spring Boot

    Jeecg-Boot 1.0 发布,企业级快速开发平台 - 开源中国https://www.oschina.net/news/104889/jeecg-boot-1-0-released

  9. Docker bridge br0 pipework

    Docker Centos7 下建立 Docker 桥接网络 - weifengCorp - 博客园https://www.cnblogs.com/weifeng1463/p/7468497.html ...

  10. asp.net Json序列化

    Json作为一种数据传输格式与标准被广泛的使用在项目开发中,可以说简直离不开它.那么怎么来生成JSON格式的数据就成了我们首先需要解决的问题这里我们使用.net. 首先是获取数据 public ban ...