Pagini recente » Cod sursa (job #1489786) | Cod sursa (job #1244239) | Cod sursa (job #11046) | Monitorul de evaluare | Cod sursa (job #1592002)
#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;
}
int cb(int j)
{
int i = 1, pas = 1 << 20;
while(pas)
{
if(i + pas <= e[j] * d[j] && verif(i + pas, j) == 0)
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)
{
int x = i, y = 0;
while(p % i == 0)
{
p /= i;
y++;
}
if(y)
{
n++;
d[n] = x;
e[n] = y * q;
}
i++;
}
int max = 0;
for(int i = 1; i <= n; i++)
{
int val = cb(i);
if(val > max)
max = val;
}
fprintf(fout, "%d", max);
return 0;
}