您的位置:首页 > 其它

HDU 4143 A Simple Problem

2016-04-06 14:03 246 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4143

代码:

#include"stdio.h"
#include"math.h"
int main()
{
int i;
int t;
int n;
int x;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
x=-1;
t=(int)sqrt(n);
for(i=t;i>0;i--)
{
if(n%i==0&&(n/i-i)%2==0&&(n/i-i)/2>0)
{
x=(n/i-i)/2;
break;
}
}

printf("%d\n",x);
}
return 0;
}


其实上述式子转化后可以分解因子:n = ( y – x )*( y + x ) ;

令 y – x = i,所以有 x + y = n / i ,即 ( n / i – i ) / 2 = x.

注意:x 要大于 0 ,当 n 是完全平方数时要注意。

刚开始还以为要预处理打表,放弃了。后来找规律,放弃了。。。还是直接枚举呀。。。

知道要从sqrt(n)开始,因为要x最小,必须y-x与y+x最接近。从sqrt(n)开始,往前找第一个满足条件的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: