Pagini recente » Cod sursa (job #2455335) | Cod sursa (job #1725667) | Cod sursa (job #1626450) | Cod sursa (job #2471334) | Cod sursa (job #526881)
Cod sursa(job #526881)
# 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)
{
long long ex, n;
for(int i=1;i<=f[0];++i)
{
ex=nr/f[i];
n=nr/f[i];
while (n && ex<e[i])
ex+=n/f[i], n/=f[i];
if (ex<e[i])
return 0;
}
return 1;
}
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, 4*p*q);
ofstream fout ("gfact.out");
fout<<sol;
return 0;
}