Pagini recente » Cod sursa (job #2353000) | Cod sursa (job #2179761) | Cod sursa (job #559589) | Cod sursa (job #380772) | Cod sursa (job #327002)
Cod sursa(job #327002)
#include<cstdio>
const int N=30;
const long long lim=((long long)1<<60);
int p,q,d[N],e[N],nrd;
void descompun(int n)
{
for(int i=2 ; i*i<=n ; ++i)
if(n%i==0)
{
d[++nrd]=i;
e[nrd]=0;
while(n%i==0)
{
n/=i;
++e[nrd];
}
}
if(n!=1)
{
d[++nrd]=n;
e[nrd]=1;
}
}
bool ok(long long n,int a,int b)
{
int r=0;
while(n)
{
n/=a;
r+=n;
}
return r>=b*q;
}
bool div(long long n)
{
for(int i=1;i<=nrd;++i)
if(!ok(n,d[i],e[i]))
return false;
return true;
}
long long calcul()
{
long long st=1,dr=lim,m;
while(st!=dr)
{
m=(st+dr)>>1;
if(div(m))
dr=m;
else
st=m+1;
}
return st;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
descompun(p);
printf("%lld\n",calcul());
return 0;
}