Pagini recente » Cod sursa (job #2056786) | Cod sursa (job #890736) | Cod sursa (job #1891336) | Cod sursa (job #1596675) | Cod sursa (job #3169675)
#include <bits/stdc++.h>
#ifdef LOCAL
#define in cin
#define out cout
#endif
#define int int64_t
using namespace std;
#ifndef LOCAL
ifstream in("gfact.in");
ofstream out("gfact.out");
#endif
bool countt(int maxx,vector<pair<int,int>> bases,int q)
{
int minn = -1;
for(auto i:bases)
{
int cnt=0;
int base1=i.first;
while(base1<=maxx)
{
cnt+=maxx/base1;
base1*=i.first;
}
if(cnt<i.second*q)return 0;
}
return 1;
}
signed main()
{
int p,q;in>>p>>q;
int st = 1, dr = __LONG_LONG_MAX__/2;
vector<pair<int,int>> bases;
int cp = p;
for(int i=2;i*i<=p;i++)
{
int toAdd=0;
while(cp%i==0)
{
cp/=i;
toAdd++;
}
if(toAdd>1)bases.push_back({i,toAdd});
}
if(cp>1)bases.push_back({cp,1});
while (st<dr)
{
int mid=(st+dr)/2;
if(countt(mid,bases,q))
{
dr=mid;
}
else
{
st=mid+1;
}
}
out<<st;
}