Pagini recente » Cod sursa (job #747492) | Cod sursa (job #3259294) | Cod sursa (job #846801) | Cod sursa (job #1833141) | Cod sursa (job #245774)
Cod sursa(job #245774)
#include <stdio.h>
#include <limits.h>
int p, q;
inline int min (int a, int b)
{
if (a < b)
return a;
return b;
}
int mult (int fact, int w)
{
int p, s;
for (s=0, p=fact; w >= p; p*=fact)
s+=w/p;
return s;
}
int binary_search (int d, int p)
{
int st=1, dr=INT_MAX, m;
while (st < dr)
{
m=(st+dr) >> 1;
if (mult (d, m) >= p)
dr=m;
else
st=m+1;
}
if (mult (d, st) == p)
return st;
return -1;
}
int descomp ()
{
int d, num, n=INT_MAX;
for (d=2; d*d <= p; ++d)
if (p % d == 0)
{
num=0;
while (p % d == 0)
{
++num;
p/=d;
}
n=min (n, binary_search (d, num*q));
}
if (p > 1)
n=min (n, binary_search (p, q));
return n;
}
int main ()
{
freopen ("gfact.in", "r", stdin);
freopen ("gfact.out", "w", stdout);
scanf ("%d%d", &p, &q);
printf ("%d\n", descomp ());
return 0;
}