Pagini recente » Cod sursa (job #746798) | Cod sursa (job #847833) | Cod sursa (job #956811) | Cod sursa (job #1622097) | Cod sursa (job #1549703)
#include <cstdio>
#define SQRT 2000000
long long fact[SQRT];
int exp[SQRT];
inline int cauta(long long nr,int n){
int flag=1,i;
long long p,con;
i=0;
while(i<n&&flag==1){
p=fact[i];
con=0;
while(p<=nr){
con+=(nr/p);
p=p*fact[i];
}
if(con<exp[i])
flag=0;
i++;
}
return flag;
}
int main(){
FILE*fi,*fout;
int e,n,b;
long long rez,pas,d,a;
fi=fopen("gfact.in" ,"r");
fout=fopen("gfact.out" ,"w");
fscanf(fi,"%lld%d" ,&a,&b);
d=2;
n=0;
while(d*d<=a){
e=0;
while(a%d==0){
a/=d;
e++;
}
exp[n]=e*b;
fact[n]=d;
n++;
d++;
}
if(a>1){
exp[n]=b;
fact[n]=a;
n++;
}
rez=0;
for(pas=1<<30;pas;pas>>=1)
if(cauta(rez+pas,n)==0)
rez+=pas;
fprintf(fout,"%lld" ,rez+1);
fclose(fi);
fclose(fout);
return 0;
}