Pagini recente » Cod sursa (job #3277641) | Cod sursa (job #1240172) | Cod sursa (job #1617733) | Cod sursa (job #2897813) | Cod sursa (job #492128)
Cod sursa(job #492128)
#include<fstream>
using namespace std;
int p,q,di[20],po[20],nr=0;
void mat(int n)
{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
di[++nr]=i;
while(n%i==0)
{
++po[nr];
n/=i;
}
}
if(n!=1)
{
di[++nr]=n;
po[nr]=1;
}
}
long long putere(long long n,int p)
{
long long s=0;
while(n/p!=0)
{
s+=n/p;
n/=p;
}
return s;
}
bool ok(long long n)
{
for(int i=1 ; i<=nr ; ++i)
if(putere(n,di[i])<q*po[i])
return false;
return true;
}
long long caut()
{
long long i,pas=(long long)1<<60;
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("%lld",caut());
return 0;
}