Pagini recente » Cod sursa (job #2298411) | Cod sursa (job #1093947) | Cod sursa (job #1765642) | Cod sursa (job #2897500) | Cod sursa (job #526874)
Cod sursa(job #526874)
# include <fstream>
# include <iostream>
# define DIM 10000
using namespace std;
int p, q, f[DIM], e[DIM], v[DIM];
long long sol=10000000000000000ll;
int ok (long long nr)
{
int pp=1, ex;
long long n;
for(int i=f[0];pp && i;--i)
{
n=nr;
ex=0;
while (ex<e[i] && n>1)
ex+=n/f[i], n/=f[i];
if (ex<e[i])pp=0;
}
return pp;
}
void cauta (long long st, long long dr)
{
if (st==dr)
{
if (st<sol && ok(st))
sol=st;
return;
}
long long mij=(st+dr)/2;
if (ok(mij))
{
sol=mij;
cauta(st, mij);
}
else
cauta(mij+1,dr);
}
void calc()
{
int nr=p;
if (p%2==0)
{
f[++f[0]]=2;
while (nr%2==0)nr/=2, ++e[f[0]];
e[f[0]]*=q;
}
for(int i=3;i*i<=p && nr>1;i+=2)
if (nr%i==0)
{
f[++f[0]]=i;
while (nr%i==0)nr/=2, ++e[f[0]];
e[f[0]]*=q;
}
}
int main ()
{
ifstream fin ("gfact.in");
fin>>p>>q;
calc();
cauta (1, 2*p*q);
ofstream fout ("gfact.out");
fout<<sol;
return 0;
}