Pagini recente » Cod sursa (job #3196280) | Cod sursa (job #1778217) | Cod sursa (job #2106440) | Cod sursa (job #3138068) | Cod sursa (job #3153331)
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define int long long
using namespace std;
#define cin in
#define cout out
ifstream in ("frac.in");
ofstream out ("frac.out");
vector <int> divv;
int solv(int a)
{
int sz=divv.size();
int k=(1LL<<sz);
int sum=0;
for (int i=1; i<k; i++)
{
int cnt=0; int part=1;
for (int pos=0; pos<sz; pos++)
{
if (i & (1LL<<pos))
{
cnt++; part*=divv[pos];
}
}
if (part>a) continue;
if (cnt%2==1) sum+=a/part;
else sum-=a/part;
}
return a-sum;
}
void bld(int b)
{
int d=2;
while (b>1)
{
int cnt=0;
while (b%d==0 && b>1)
{
b/=d; cnt++;
}
if (cnt) {divv.push_back(d);}
d++;
if (b>1 && d*d>b) d=b;
}
}
signed main()
{
int p,n; cin>>n>>p; bld(n);
int le=0; int ri=(1LL<<62);
while (le<ri)
{
int mid=le+(ri-le+1)/2;
int cate=solv(mid);
if (cate>=p) ri=mid-1;
else le=mid;
}
cout<<le+1;
}