Pagini recente » Cod sursa (job #1896184) | Cod sursa (job #722873) | Cod sursa (job #2878517) | Cod sursa (job #1804107) | Cod sursa (job #1592065)
#include <stdio.h>
using namespace std;
int d[1000], e[1000], n = 0;
bool verif(int x, int j)
{
int pow = d[j];
int nr = 0;
while(x/pow)
{
nr += x / pow;
pow *= d[j];
}
if(nr < e[j])
return false;
return true;
}
long long cb(int j)
{
long long i = 1, pas = 1 << 20;
while(pas)
{
if(i + pas <= (unsigned long long)e[j] * d[j] && verif(i + pas, j) == false)
i += pas;
pas >>= 1;
}
return i + 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen("gfact.in", "r");
fout = fopen("gfact.out", "w");
int p, q;
fscanf(fin, "%d%d", &p, &q);
int i = 2;
while(p != 1 && i * i <= p)
{
int x = i, y = 0;
while(p % i == 0)
{
p /= i;
y++;
}
if(y)
{
n++;
d[n] = x;
e[n] = y * q;
}
i++;
}
if(p)
{
n++;
d[n] = p;
e[n] = q;
}
long long min = 0x3f3f3f3f;
for(int i = 1; i <= n; i++)
{
int val = cb(i);
if(val/e[i] < min)
min = val;
}
fprintf(fout, "%lld", min);
return 0;
}