Pagini recente » Cod sursa (job #2767928) | Cod sursa (job #1774) | Cod sursa (job #1844805) | Cod sursa (job #463971) | Cod sursa (job #1142996)
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int v[20], e[20], np, q;
int multipl(int n, int prim)
{
int sum;
sum = 0;
while(n)
{
sum += n / v[prim];
n /= v[prim];
}
return sum;
}
bool verifica(int n)
{
int i;
for(i = 0; i < np; i++)
if(multipl(n, i) < q * e[i])
return 0;
return 1;
}
int main()
{
int p, prim, exp, i, pas;
in>>p>>q;
if(p == 1)
{
out<<0<<'\n';
return 0;
}
prim = 2;
np = 0;
if(p % prim == 0)
{
v[np] = prim;
exp = 0;
while(p % prim == 0)
{
p /= prim;
exp++;
}
e[np] = exp;
np++;
}
prim = 3;
while(prim * prim <= p)
{
if(p % prim == 0)
{
v[np] = prim;
exp = 0;
while(p % prim == 0)
{
p /= prim;
exp++;
}
e[np] = exp;
np++;
}
prim += 2;
}
if(p != 1)
{
v[np] = p;
e[np] = 1;
np++;
}
i = 0;
pas = 1 << 30;
while(pas)
{
if(!verifica(i + pas))
i += pas;
pas /= 2;
}
out<<i + 1<<'\n';
return 0;
}