Pagini recente » Cod sursa (job #662578) | Cod sursa (job #2570118) | Cod sursa (job #1463465) | Cod sursa (job #1017287) | Cod sursa (job #390702)
Cod sursa(job #390702)
#include<cstdio>
struct pereche
{
int d,e;
};
pereche v[1<<4];
int nr,p,q;
void desc(int p)
{
int i;
nr=0;
for(i=2;i*i<=p;i++)
if(p%i == 0)
{
v[++nr].d=i;
v[nr].e=0;
while(p%i==0)
{
p /=i;
v[nr].e++;
}
}
if(p!=1)
{
v[++nr].d=p;
v[nr].e=1;
}
}
int func (int p,long long n)
{
int c=0;
while(n)
{
c+=n/p;
n/=p;
}
return c;
}
bool ok(long long n)
{
int i;
for(i=1;i<=nr;i++)
if(func(v[i].d,n)<v[i].e*q)
return false;
return true;
}
long long caut()
{
long long i,pas=(long long)1<<50;
for(i=0; pas; pas>>=1)
{
if (!ok(i+pas))
i+=pas;
}
return i+1;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d %d",&p,&q);
desc(p);
printf("%lld\n",caut());
return 0;
}