Pagini recente » Cod sursa (job #2264110) | Cod sursa (job #1704885) | Istoria paginii runda/stele | Istoria paginii runda/simulare_oji_2015 | Cod sursa (job #1123151)
#include<cstdio>
struct div{
int x;
int w;
}v[1000000];
int n,q,a,b,i,j,nr;
long long p,u,mid;
FILE *f,*g;
int verif(long long mid){
long long i,p=1,a;
for(i=1;i<=nr;i++){
p=v[i].x;
a=0;
while(p<=mid&&a<=v[i].w){
a+=mid/p;
p*=v[i].x;
}
if(a<v[i].w)
return 0;
}
return 1;
}
int main(){
f=fopen("gfact.in","r");
g=fopen("gfact.out","w");
fscanf(f,"%d%d",&n,&q);
a=n;
for(i=2;i<=n/i;i++){
if(a%i==0){
v[++nr].x=i;
while(a%i==0){
v[nr].w+=q;
a/=i;
}
}
}
if(a!=0){
v[++nr].x=a;
v[nr].w=q;
}
p=1;
u=1LL*n*q;
while(p<=u){
mid=(p+u)/2;
if(verif(mid))
u=mid-1;
else
p=mid+1;
}
fprintf(g,"%lld",p);
fclose(f);
fclose(g);
return 0;
}