4143 - A Simple Problem
题目意思很明确,对于公式y ^ 2 = n +x ^ 2,每次给你一个数 n,求使得 y 为整数的最小正整数 x 。
该式可化为 n = ( y + x ) * ( y - x )。令 y - x = k (k为正整数),则有
n / k = x + y ,
k = x + y;
联立得
x = ( n / k - k ) / 2。
那么接下来我们只要枚举 k 值直到 x 值为正整数时输出就好了。
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int T;
int n, t, flag;
cin >> T;
while (T--)
{
cin >> n;
flag = 0;
t = sqrt(n);
for (int i = t; i > 0; i--)
{
if (n%i == 0 && (n / i - i) % 2 == 0 && n / i != i)
{
cout << ((n / i - i) / 2) << endl;
flag = 1;
break;
}
}
if (flag == 0)
cout << -1 << endl;
}
return 0;
}