Pagini recente » Cod sursa (job #2663430) | Cod sursa (job #463164) | Cod sursa (job #940565) | Cod sursa (job #2041895) | Cod sursa (job #2082706)
#include <iostream>
#include <fstream>
using namespace std;
int d[20],p[20];
int y,r,pas,ndp;
long long x;
ifstream in("gfact.in");
ofstream out("gfact.out");
int nrzero(int n)
{
int nr=0;
while(n>=5)
{
nr+=(n/=5);
}
return nr;
}
long long putere(long long n,int pr)
{
long long nr = 0;
while(n>=pr)
{
nr+=(n/=pr);
}
return nr;
}
bool sedivide(long long n)
{
for(int i=0; i<ndp; i++)
{
if(putere(n,d[i])<p[i]*y)
{
return false;
}
}
return true;
}
int main()
{
in>>x>>y;
ndp=0;
int a=2;
while(a*a <= x)
{
if(x % a==0)
{
d[ndp]=a;
while(x %a==0)
{
p[ndp]++;
x/=a;
}
ndp++;
}
a++;
}
if(x>1)
{
d[ndp]=x;
p[ndp]=1;
ndp++;
}
long long pas=1LL<<45,r=0;
while(pas!=0)
{
if(!sedivide(r+pas))
{
r+=pas;
}
pas/=2;
}
r++;
out<<r;
return 0;
}