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. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  2. oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理

    问题产生的操作步骤及详细说明: 1)操作的数据库是oracle 11g,先通过命令将用户GAS_NEW的数据导出,命令语句如下: expdp GAS_NEW/GAS_NEW@ORCL schemas= ...

  3. nodejs简单模仿web.net web api

    最近用了asp.net web api + EF开发一个项目,但是移植到linux时遇到问题(mono只支持EF6.0,但是mysql驱动不支持EF6.0).所以决定换个思路,用nodejs实现res ...

  4. (深度好文)重构CMDB,避免运维之耻

    (深度好文)重构CMDB,避免运维之耻 CMDB,几乎是每个运维人都绕不过去的字眼,但又是很多运维人的痛,因为CMDB很少有成功的,因此我也把它称之为运维人的耻辱. 那么到底错在哪儿了?该如何去重构它 ...

  5. IIS 日志导入到数据库的方法

    使用微软Log Parser 执行 logparser "SELECT * FROM d:\iislogs\u_ex18071705.log TO myTableName" -o: ...

  6. 接口自动化框架(Pytest+request+Allure)

    前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱. 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试. 本次文章着重介绍第一种, ...

  7. webapack

    webpack  就是一个前端资源加载.打包工具. 核心思想:会根据(js css less文件)模块依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源,减少页面请求. wapack ...

  8. PS调出怀旧雨中特写的非主流照片

    原图 最终效果 一.打开原图素材,按Ctrl + ALt + ~ 调出高光选区,按Ctrl + Shift + I 反选,然后创建曲线调整图层,适当调暗一点. 二.合并所有图层,点通道面板,选择蓝色通 ...

  9. linux中mariadb的安装

    在Linux中mariaDB的安装 MariaDB其实就是MySQL的分支,是为了应对MySQL的即将的闭源风险所产生的. Linux系统中软件包的格式为mysql.rpm格式. 通过yum去安装 L ...

  10. JSP页面导致tomcat内存溢出一例

    今天发现一个奇怪的问题,一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码——想用这个jsp页面配合tomcat完成一个性能验证.但是用jmeter压测了几分钟 ...