您的位置:首页 > 其它

hdu 4143 A Simple Problem

2013-09-23 17:26 351 查看
2011百校联动“菜鸟杯”程序设计公开赛

题意:求一个最小的x使得y^2 = x^2 + n, x ,y,n均为整数, 且1<=n<<10^9.
分解因式(y-x)*(y+x) = n,令i=y-x枚举i从根号n到1
x=(n/i-i)/2,且i越大,x越小,所以当满足条件时即为所求x值

#include <cstdio>
#include <cmath>
int main()
{
  int t, n;
  scanf("%d", &t);
  while(t--)
    {
       scanf("%d", &n);
       int ans = inf;
       int k = (int)sqrt(1.0*n);
       for(int i=k; i>=1; i--)
         if(n%i==0 && n/i!=i && (n/i-i)%2 == 0)
           {
              ans = (n/i-i)/2;
              break;
           }
       if(ans == inf)
         printf("-1\n");
       else 
         printf("%d\n",ans);
    }
  return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: