Pagini recente » Cod sursa (job #1924093) | Cod sursa (job #2696068) | Cod sursa (job #2330455) | Cod sursa (job #1093878) | Cod sursa (job #526834)
Cod sursa(job #526834)
# include <fstream>
# include <iostream>
# define DIM 10000
using namespace std;
int p, q, f[DIM], e[DIM], v[DIM];
long long sol;
int ok (long long nr)
{
int pp=1, ex, n;
for(int i=f[0];pp && i;--i)
{
pp=0;
ex=0;
for(int j=nr;j;--j)
{
n=j;
while (n%f[i]==0 && ex<e[i])
++ex, n/=f[i];
}
if (ex>=e[i])
pp=1;
}
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()
{
if (p%2==0)
{
f[++f[0]]=2;
while (p%2==0)p/=2, ++e[f[0]];
e[f[0]]*=q;
}
for(int i=3;p>1;i+=2)
if (p%i==0)
{
f[++f[0]]=i;
while (p%i==0)p/=2, ++e[f[0]];
e[f[0]]*=q;
}
}
int main ()
{
ifstream fin ("gfact.in");
fin>>p>>q;
calc();
cauta (1, 2*e[f[0]]*f[f[0]]);
ofstream fout ("gfact.out");
fout<<sol;
return 0;
}