Pagini recente » Cod sursa (job #1069184) | Cod sursa (job #1386718) | Cod sursa (job #261627) | Cod sursa (job #2098713) | Cod sursa (job #1748381)
#include <stdio.h>
#define maxd 510
const long long lim = 1LL << 50;
long long div[maxd],put[maxd],n,baza,exp;
void divizori(long long x){
long long i;
for(i=2;i*i<=x;i++)
if(x%i==0){
n++;
div[n]=i;
while(x%i==0){
x/=i;
put[n]++;
}
}
if(x!=1){
n++;
div[n]=x;
put[n]=1;
}
}
int verif(long long x){
long long i,k,sum;
for(i=1;i<=n;i++){
sum=0;
k=div[i];
while(x/k>0){
sum+=x/k;
k=k*div[i];
}
if(sum<put[i]*exp)
return 0;
}
return 1;
}
int main(){
FILE *fin,*fout;
fin=fopen("gfact.in","r");
fout=fopen("gfact.out","w");
long long st,dr,mij,rasp=0;
fscanf(fin,"%lld%lld",&baza,&exp);
divizori(baza);
st=0;
dr=lim;
while(st<=dr){
mij=(st+dr)/2;
if(verif(mij)==1){
rasp=mij;
dr=mij-1;
}
else
st=mij+1;
}
fprintf(fout,"%lld",rasp);
fclose(fin);
fclose(fout);
return 0;
}