Pagini recente » Cod sursa (job #353752) | Cod sursa (job #5435) | Cod sursa (job #2022737) | Cod sursa (job #1695311) | Cod sursa (job #2560259)
#include <iostream>
#include <fstream>
using namespace std;
ifstream r("abx.in");
ofstream w("abx.out");
long long m;
long long put(long long a, long long b){
long long p=1;
while(b!=0){
if(b%2==1){
p*=a;
}
b/=2;
a*=a;
}
if(p>m || p<0){
return 0;
}
return p;
}
int cautbin(int putere, long long numar){
int st=0, dr=numar, mij, rez=1;
while(st<=dr){
mij=(dr+st)/2;
if(put(mij,putere)>=numar || put(mij,putere)==0){
dr=mij-1;
rez=mij;
}
else{
st=mij+1;
}
}
return rez;
}
int main()
{
int n;
r>>n>>m;
for(int k=0;k<n;k++){
long long x, nr, minim=m;
r>>x;
for(int i=2;i<=60;i++){
long long exponent, dif, nrp;
exponent=cautbin(i,x);
if(put(exponent,i)-x<x-put(exponent-1,i) && put(exponent,i)<=m){
dif=put(exponent,i)-x;
nrp=put(exponent,i);
}
else{
dif=x-put(exponent-1,i);
nrp=put(exponent-1,i);
}
if(dif<minim && nrp<=m && nrp>0){
minim=dif;
nr=nrp;
}
}
w<<nr<<"\n";
}
return 0;
}