Pagini recente » Cod sursa (job #2549215) | Cod sursa (job #2984003) | Cod sursa (job #2340572) | Cod sursa (job #2710721) | Cod sursa (job #805404)
Cod sursa(job #805404)
#include <stdio.h>
int p,q,d,putere[24],div[24];
bool divide(long long n)
{
int i,j;
long long pow,s;
for(i=1;i<=d;i++)
{
s=0;
pow=1;
while(pow <= n)
{
pow *= div[i];
s += n/pow;
}
if(s < putere[i]*q) return false;
}
return true;
}
void descomp(int n)
{
int i;
for(i=2 ; i*i<=n ; i++)
{
if(n%i!=0) continue;
div[++d] = i;
while(n%i == 0)
{
putere[d]++;
n /= i;
}
}
if(n != 1)
{
div[++d] = n;
putere[d] = 1;
}
}
long long caut()
{
long long i,pas = 1LL << 60;
for(i=0 ; pas!=0 ; pas >>= 1)
if(!divide(i+pas))
i += pas;
return i+1;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","r",stdout);
scanf("%d%d",&p,&q);
descomp(p);
printf("%d",caut());
}