Pagini recente » Cod sursa (job #859109) | Cod sursa (job #151095) | Cod sursa (job #1075734) | Cod sursa (job #1450031) | Cod sursa (job #2635418)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#define NMAX 100005
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long n,m;
vector<pair<long long,long long>> factorizare;
void factor(long long x)
{
int d = 2;
while(x > 1)
{
if(x % d == 0)
{
int f = 0;
while(x % d == 0)
{
x/=d;
f++;
}
factorizare.push_back({d,f});
}
d++;
if(d * d > x)
{
d = x;
}
}
}
long long count(long long nr,long long x)
{
long long sol = 0;
long long aux = nr;
while(x / nr)
{
sol+=x/nr;
nr*=aux;
}
return sol;
}
int nr(long long x)
{
int ok = 1;
for(int i = 0;i<factorizare.size() && ok;i++)
{
long long rez = count(factorizare[i].first,x);
if(rez < factorizare[i].second )
ok = 0;
}
return ok;
}
int main()
{
fin>>n>>m;
long long st = 0;
long long dr = 5000000000;
long long sol = -1;
factor(n);
for(int i = 0; i < factorizare.size();i++)
{
factorizare[i].second *= m;
}
while(st <= dr)
{
long long m = (st + dr) / 2;
long long rez = nr(m);
if(rez == 1)
{
sol = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
if(sol == 1)
sol = 0;
fout<<sol;
return 0;
}