Pagini recente » Cod sursa (job #2581214) | Cod sursa (job #2751272) | Cod sursa (job #1759621) | Cod sursa (job #2815235) | Cod sursa (job #2082684)
#include <iostream>
#include <fstream>
using namespace std;
int d[15],p[15],ndp;
long long x;
int y;
void formare()
{
int a=2;
ndp=0;
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 putere(long long n,int p)
{
long long nr=0;
while (n>=p)
{
nr+=(n/=p);
}
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()
{
ifstream in("gfact.in");
ofstream out("gfact.out");
in>>x>>y;
long long r,pas;
r=0;
pas=1<<30;
formare();
while (pas!=0)
{
if (sedivide(pas+r)==false)
{
r+=pas;
}
pas/=2;
}
r++;
out<<r;
in.close();
out.close();
return 0;
}