Pagini recente » Cod sursa (job #1825135) | Cod sursa (job #2804156) | Cod sursa (job #2299830) | Cod sursa (job #343968) | Cod sursa (job #57401)
Cod sursa(job #57401)
#include <stdio.h>
#include <math.h>
#define NMAXSQRT 50000
int prim[NMAXSQRT];
long p, q;
long max;
void search(int p, int nr)
{
int st, dr, m;
int nrp, pow;
long keep = 2000000000;
st = 1;
dr = nr * p;
while(st <= dr)
{
m = (st + dr) / 2;
for(nrp = 0, pow = p; m / pow; nrp += m / pow, pow *= p);
if(nrp >= nr)
{
if(keep > m)
keep = m;
dr = m - 1;
}
else if(nrp < nr)
{
st = m + 1;
}
}
if(max < keep)
max = keep;
}
void ciur()
{
int i, j, nr, aux;
long until = sqrt(p);
for(nr = 0, aux = p; !(aux % 2); aux /= 2, ++nr);
if(nr != 0)
search(2, nr * q);
for(i = 3; i <= until; i += 2)
{
if(!prim[i])
{
for(nr = 0, aux = p; !(aux % i); aux /= i, ++nr);
if(nr != 0)
search(i, nr * q);
for(j = i; j <= until; j += i)
{
prim[j] = 1;
}
}
}
}
int main()
{
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
scanf("%ld %ld\n", &p, &q);
/*
p = 12;
q = 1;
*/
ciur();
printf("%ld\n", max);
fclose(stdin);
fclose(stdout);
return 0;
}