水题
?
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
示例程序
?
?
?
题目知道y*y - x*x = n ----> (y-x)*(y+x) = n 并且(y-x)和(y+x)同奇偶所
?
以根据这个特性就可以做了。但是我就不明白这个题把n定义成long long int 为什么就
?
是无休止的WA,几个小时不用干别的了,就在那里想哪里出错了。万念俱灰的把long
?
long去掉交居然就AC了,搞不懂........
?
?
?
#include
#include
#include
#include
#include
#include
#include
using namespace std; int n; void maxx(int &a,int &b) { if(a
=1;i--) { if(n%i == 0) { x = i; y = n/i; if(x!=y) { maxx(x,y); if((x%2 == 0 && y%2 == 0) || (x%2 == 1 && y%2 == 1)) { flag = 1; int px = (x-y)/2; if(minn>px) { minn = px; } } } } } if(flag == 0) { printf("-1\n"); } else { printf("%d\n",minn); } } return 0; }
?