Pagini recente » Cod sursa (job #2031009) | Cod sursa (job #1376966) | Cod sursa (job #2350048) | Cod sursa (job #2153864) | Cod sursa (job #2285747)
#include <bits/stdc++.h>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int p,q,nd;
const int L=31;
pair <int,int> v[100001];
void desc(int n)
{
int dv = 2;
while (dv * dv <= n)
{
if (n % dv == 0)
{
v[nd].first = dv;
while (n % dv == 0)
{
v[nd].second++;
n /= dv;
}
nd++;
}
dv++;
}
if (n > 1)
{
v[nd].first = n;
v[nd++].second = 1;
}
}
int getp(long long x, int y)
{
long long ans=0;
while(x>=y)
{
ans+=x/y;
x/=y;
}
return ans;
}
bool check(long long n)
{
for(int i=0;i<nd;++i)
{
if(getp(n,v[i].first)<v[i].second*q)
return 0;
return 1;
}
}
long long binar()
{
long long r=0;
long long pas=1LL << L;
while(pas)
{
if(!check(r+pas))
r+=pas;
pas/=2;
}
r++;
return r;
}
int main()
{
in>>p>>q;
desc(p);
out<<binar();
return 0;
}