Pagini recente » Cod sursa (job #883150) | Cod sursa (job #1514165) | Cod sursa (job #262885) | Cod sursa (job #2374498) | Cod sursa (job #3169664)
#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 rep)
{
int rasp = 0;
for(int put = nr; put <= b && put > 0; put *= nr)
{
rasp += (b / put);
}
return (rasp >= q*rep);
}
vector<pair<int,int> > cautaDiv(int p)
{
vector<pair<int,int> > rasp;
int pcop = p;
for(int i=2; i*i<pcop && p > 1; i++)
{
if(p % i == 0)
{
int rep = 0;
while(p%i == 0) {p/=i; rep++;}
rasp.push_back({i,rep});
}
}
if(p != 1) rasp.push_back({p,1});
return rasp;
}
int32_t main()
{
fin>>p>>q;
vector<pair<int,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.first,pi.second)) OK = false;
}
if(OK)
{
rasp = mij;
dr = mij-1;
}
else st = mij+1;
}
fout<<rasp;
return 0;
}