Pagini recente » Cod sursa (job #2975693) | Cod sursa (job #3253017) | Cod sursa (job #2415803) | Cod sursa (job #1371300) | Cod sursa (job #2082770)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f ("gfact.in");
ofstream g ("gfact.out");
int d[30002], p[30002];
long long r, n1, ndp, n, m, pas;
long long putere (long long n1, int p1)
{
long long nr0=0;
while (n1>=p1)
{
nr0+=(n1/=p1);
}
return nr0;
}
bool sedivide (long long r)
{
for (int i=0; i<ndp; i++)
{
if (putere(r, d[i])<p[i]*m)
{
return false;
}
}
return true;
}
int main()
{
int a, i;
f>>n>>m;
r=0;
pas=1LL<<45;
ndp=0;
a=2;
//g<<n<<endl;
while (a*a<=n)
{
p[ndp]=0;
if (n%a==0)
{
d[ndp]=a;
while (n%a==0)
{
p[ndp]++;
n /= a;
}
ndp++;
}
a++;
}
if (n>1)
{
d[ndp]=n;
p[ndp]=1;
ndp++;
}
while (pas!=0)
{
if (!sedivide(r+pas))
{
r+=pas;
}
pas /= 2;
}
g<<r+1;
return 0;
}