Pagini recente » Cod sursa (job #2750509) | Cod sursa (job #2175947) | Cod sursa (job #1833278) | Cod sursa (job #2459156) | Cod sursa (job #3169657)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p,q;
bool ok(int b, int nr)
{
int rasp = 0;
for(int put = nr; put <= b && put > 0; put *= nr)
{
rasp += (b / put);
}
return (rasp >= q);
}
vector<int> cautaDiv(int p)
{
vector<int> rasp;
int pcop = p;
for(int i=2; i*i<pcop && p > 1; i++)
{
if(p % i == 0)
{
rasp.push_back(i);
while(p%i == 0) p/=i;
}
}
if(p != 1) rasp.push_back(p);
return rasp;
}
int32_t main()
{
fin>>p>>q;
vector<int> div = cautaDiv(p);
int st = 1,rasp=-1,dr = 1e18;
while(st <= dr)
{
int mij = (st + dr) / 2;
bool OK = true;
for(auto pi: div)
{
if(!ok(mij,pi)) OK = false;
}
if(OK)
{
rasp = mij;
dr = mij-1;
}
else st = mij+1;
}
fout<<rasp;
return 0;
}