http://acm.hdu.edu.cn/showproblem.php?pid=5778
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
bool check(ll x)
{
for (ll i = 2; i * i <= x; i++)
{
int cnt = 0;
while (x % i == 0)
{
cnt++;
x /= i;
if (cnt > 1)
{
return false;
}
}
}
return true;
}
int main()
{
int t;
cin >> t;
while (t--)
{
ll x;
cin >> x;
if (x < 4)
{
cout << 4 - x << endl;
continue;
}
ll t1 = sqrt(x);
ll t2 = sqrt(x) + 1;
ll ans1 = 0, ans2 = 0;
while (1)
{
if (t1 >= 2 && check(t1))
{
ans1 = t1;
}
if (t2 <= 1e9 && check(t2))
{
ans2 = t2;
}
if (ans1 != 0 || ans2 != 0)
{
ans1 = abs(ans1 * ans1 - x);
ans2 = abs(ans2 * ans2 - x);
ll ans = min(ans1, ans2);
cout << ans << endl;
break;
}
t1--, t2++;
}
}
return 0;
}