HDU 4143A Simple Problem

来源:互联网 发布:bcm43142 linux 驱动 编辑:程序博客网 时间:2024/04/28 08:47

题目: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)开始,往前找第一个满足条件的。

1 0
原创粉丝点击