您的位置:首页 > 其它

水题

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: