Pagini recente » Cod sursa (job #2207806) | Cod sursa (job #1201463) | Cod sursa (job #1779603) | Cod sursa (job #472061) | Cod sursa (job #1688186)
#include <fstream>
using namespace std;
int e[100], d[100], nd , p, q;
long long putere (long long n,int x)
{
long long rez=0;
while(n>=x)
{
rez+=n/x;
n=n/x;
}
return rez;
}
bool divide(long long x)
{
for(int i=1;i<=nd;i++)
if(putere(x,d[i])<(long long)e[i]*q)
return false;
return true;
}
long long caut ()
{
long long i=0,pas = 1LL<<60;
while(pas!=0)
{
if(!divide(i+pas))
i+=pas;
pas/=2;
}
return 1+i;
}
int main()
{
int cp, nrp, i=0;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
cin>>p>>q;
int a=2;
cp = p;
while(a*a<=p)
{
if(p%a==0)
{
d[++nd]=a;
nrp=0;
while(p%a == 0)
{
nrp++;
p/=a;
}
e[nd]=nrp;
}
a++;
}
if(p != 1)
{
nd++;
d[nd]=a;
e[nd]=1;
}
p = cp;
cout << caut() << "\n";
return 0;
}