题目链接:http://codeforces.com/contest/707/problem/C

题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外两条边,否则输出-1“”。

解题思路:下面是我从作业帮上找的- -,

利用平方差公式
令斜边为c,直角边为a、b,且b为最短边
c²-a²=(c+a)(c-a)
因此(c+a)(c-a)是完全平方数,且(c-a)是(c+a)的一个因数
1、如果(c-a)=1,则(c+a)是完全平方数(最短边是任意大于2的奇数)
例如:5、4、3;13、12、5;25、24、7;41、40、9;...
2、如果(c-a)=2,则(c+a)/2是完全平方数(最短边是任意大于2的偶数)
例如:5、3、4;10、8、6;17、15、8;26、24、10;...
即:最短边是任意一个大于2的正整数,都可以配成一个三边都是整数的直角三角形.

当直角边b已知,b<=2时无解,接下来分两种情况考虑:①b为奇数,因c-a=1得c=a+1,所以(c-a)*(c+a)=2*a+1=b*b,可得a=(b*b-1)/2.

                         ②b为偶数,因c-a=2得c=a+2,所以(c-a)*(c+a)=4*(a+1)=b*b,可得a=b*b/4-1.

代码:

 #include<iostream>
using namespace std;
const int N=1e9+;
typedef long long LL; int main(){
LL b;
cin>>b;
if(b>){
LL a;
if(b%){
a=(b*b-)/;
cout<<a<<" "<<a+<<endl;
}
else{
a=b*b/-;
cout<<a<<" "<<a+<<endl;
}
}
else
puts("-1");
return ;
}

最新文章

  1. AndroidStudio非法字符: &#39;\ufeff&#39;解决
  2. 11月8日下午Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格
  3. 最有效地优化 Microsoft SQL Server 的性能
  4. UVA 10817 Headmaster&#39;s Headache(DP +状态压缩)
  5. c++中basic_istream::getline()的返回值何时为真
  6. nodejs 平台的 webscoket 的实现
  7. Django的使用
  8. GUI(国际象棋棋盘)
  9. JAVAEE企业级应用开发浅谈第二辑:MVC和三层架构
  10. c++对象在lua层的生命周期与内容扩展
  11. php两个问号??表示什么意思,PHP两个问号运算符,双问号表达式
  12. Linux中Apache服务器的简单配置
  13. SSRF漏洞浅析
  14. Mac快捷键大全及cheatsheet插件
  15. &lt;转&gt;聊聊持续集成
  16. python技巧 switch case语句
  17. Hibernate5总结
  18. 原 nc在centos7上的安装和简单使用
  19. Swift map filter reduce 使用指南
  20. Python bool() 函数

热门文章

  1. BZOJ3781:小B的询问——题解
  2. BZOJ1040 骑士 【环套树 树形dp】
  3. 1、搭建Struts2开发环境
  4. iOS中产生随机数的方法
  5. HDU4513:吉哥系列故事——完美队形II(Manacher)
  6. maven中用yuicompressor和closure-compiler对js、css文件进行压缩
  7. jQuery中 $.extend 和 $.fn.extend 作用及区别
  8. ZooKeeper开发者指南(五)
  9. nginx 状态监控
  10. 用Photoshop制作一寸照片