Pagini recente » Cod sursa (job #2390055) | Cod sursa (job #487187) | Cod sursa (job #1443829) | Cod sursa (job #931128) | Cod sursa (job #2082711)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int d[15], nr, p, q, v[20];
int z(int n)
{
int nr=0;
while(n>=5)
nr+=(n/=5); //nr+=n/5; n/=5;
return nr;
}
long long pu(long long n, int p)
{
long long x=0;
while (n>=p)
x+=(n/=p);
return x;
}
void div(int p)
{
int a=2;
nr=0;
while(a*a<=p)
{
if(p%a==0)
{
d[nr]=a;
while(p%a==0)
{
v[nr]++;
p/=a;
}
nr++;
}
a++;
}
if(p>1)
{
d[nr]=p;
v[nr]=1;
nr++;
}
}
bool sedv(long long n)
{
for(int i=0; i<nr; i++)
if(pu(n, d[i])<v[i]*q)
return false;
return true;
}
int main()
{
long long r=0, pas=1ll<<45;
in>>p>>q;
div(p);
while(pas!=0)
{
if(!sedv(r+pas))
r+=pas;
pas/=2;
}
r++;
out<<r;
return 0;
}