水题
2015-07-19 20:55
295 查看
水题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一个正整数 n,求一个最小的正整数 x,使得可以找到一个正整数y,且满足 y*y= n + x*x。
输入
输入包含多组测试数据。每组数据只有一行为 1 个整数 n(0 < n < 10^9)。
输出
对于每组测试数据,按照题目描述输出对应的结果,如果找不到这样的正整数 x ,则输出 -1。
示例输入
2 3
示例输出
-1 1
提是:
平方差公式
来源
qinchuan
示例程序
#include<cstdio> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int main() { int n; int a,b; bool flag; while(~scanf("%d",&n)) { if(n==1) { printf("-1\n"); continue; } flag=0; for(int i=floor(sqrt(n)-0.5); i>=1; i--) { if(n%i==0) { a=i; b=n/i; if((a+b)%2==0) { flag=1; printf("%d\n",(b-a)/2); break; } } } if(!flag) printf("-1\n"); } return 0; }
相关文章推荐
- [LeetCode][Java] Merge Sorted Array
- Java IO练习
- MySQL 忘记密码解决方案
- 代表控件的对象
- 关于导出数据库提示 outfile disabled的解决方案
- hdu2181 dfs
- 杭电 hdu 1102 Constructing Roads (最小生成树)
- shell 中 seq的用法总结
- Delete Node in a Linked List
- Linux 2.6.35内核配置 armv7 s5pv210 模块加载错误
- Android应用的耗电量统计
- SSH上传文件时报错
- VBS学习日记(一个) 开始了解
- Redis常用命令
- 使用simhash算法对网页去重
- C++归并排序总结
- 探究网上的一个用MATLAB写的SIFT
- HDU 1005 F(Contest #1)
- Printer Queue
- CodeForces 316c1 Tidying Up