Pagini recente » Cod sursa (job #1703687) | Cod sursa (job #1694917) | Cod sursa (job #819663) | Cod sursa (job #2877393) | Cod sursa (job #492140)
Cod sursa(job #492140)
#include<cstdio>
using namespace std;
int p,q,d[20],pu[20],num=0;
void mat(int n)
{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
d[++num]=i;
while(n%i==0)
{
++pu[num];
n/=i;
}
}
if(n!=1)
{
d[++num]=n;
pu[num]=1;
}
}
long put(long long n,int p)
{
long s=0;
while(n/p!=0)
{
s+=n/p;
n/=p;
}
return s;
}
bool ok(long long n)
{
for(int i=1 ; i<=num ; ++i)
if(put(n,d[i])<q*pu[i])
return false;
return true;
}
long caut()
{
long i,pas=(long long)1<<29;
for(i=0;pas!=0;pas/=2)
if(!ok(i+pas))
i += pas;
return 1+i;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
mat(p);
printf("%ld\n",caut());
return 0;
}