Pagini recente » Cod sursa (job #868015) | Cod sursa (job #960534) | Cod sursa (job #888510) | Cod sursa (job #1951606) | Cod sursa (job #526877)
Cod sursa(job #526877)
# include <fstream>
# include <iostream>
# define DIM 10000
using namespace std;
int q, f[DIM], e[DIM], v[DIM];
long long sol=60000000000666ll, p;
int ok (long long nr)
{
int pp=1, ex;
long long n;
for(int i=1;pp && i<=f[0];++i)
{
n=nr;
ex=n/f[i];
n/=f[i];
while (n)
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()
{
long long 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;
}
if (nr>1)f[++f[0]]=nr,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;
}