題目描述
給定一個數x,求正整數y\geq 2y≥2,使得滿足以下條件:
1.y-x的絕對值最小
2.y的質因數分解式中每個質因數均恰好出現2次。
對於每組數據,輸出一行y-x的最小絕對值
解法
暴力向兩邊找,但是要注意要先開方!
代碼
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool sat(ll z) {
ll l = sqrt(z);
for(ll i = 2; i <= l; i++) {
if(!(z%i)) {
z /= i;
if(!(z%i)) return false;
}
}
return true;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
ll x;
scanf("%I64d",&x);
ll z = sqrt(x);
ll t1, t2;
bool h = false;
for(t1 = z; t1 >= 2; t1--) {
if(sat(t1)) {
h = true;
break;
}
}
for(t2 = z + 1; ; t2++) {
if(sat(t2)) break;
}
ll res = t2*t2 - x;
if(h) res = min(res, x - t1*t1);
printf("%I64d\n",res);
}
}