hdu 4143 A Simple Problem (变形)

题目

题意:给n,求x;

直接枚举肯定超时, 把给的式子变形, (y+x)(y-x) = n;

令y-x = b, y+x = a;

枚举b, b 的范围肯定是sqrt(n),  y = (a+b)/2;  x = (a-b)/2;

b越大, x越小, 所以倒着枚举b

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std; int main()
{
int t, n, a, b, x;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
x = -;
for(b = sqrt(n); b >= ; b--)
{
if(n%b==)
{
a = n/b;
if(a>b && (a-b)%==)
{
x = (a-b)/;
break;
}
}
}
printf("%d\n", x);
}
return ;
}
上一篇:form表单中的enctype属性什么意思?


下一篇:Mybatis代码调试问题总结(一)