Pagini recente » Cod sursa (job #1274146) | Cod sursa (job #541011) | Cod sursa (job #1109237) | Cod sursa (job #594291) | Cod sursa (job #3143745)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
#define cin fin
#define cout fout
long long calc(long long a, long long b){
vector<int> prime;
long long ans = 0;
int d = 2, p = 1;
while(b > 1){
p = 0;
while(b && b % d == 0){
b /= d;
p++;
}
if(p){
prime.push_back(d);
}
d++;
if(d *d > b && b > 1){
d = b;
}
}
int s = prime.size();
for(int mask = 1; mask < (1 << s); mask++){
long long sm = 1;
for(int i = 0; i < s; i++){
if(mask & (1 << i)){
sm = 1ULL * sm * prime[i];
}
}
if(sm <= a){
if(__builtin_popcount(mask) % 2 == 0){
ans -= (a / sm);
}else{
ans += (a / sm);
}
}
}
return a - ans;
}
long long n, p;
int main(){
//cin.tie(0)->sync_with_stdio(0);
cin >> n >> p;
long long st = 1, dr = 1e18;
while(st <= dr){
long long tm = (st + dr) / 2;
long long nr = calc(tm, n);
if(nr < p){
st = tm + 1;
}else{
dr = tm - 1;
}
}
cout << st << " " << '\n';
}