Pagini recente » Cod sursa (job #1859826) | Cod sursa (job #1438512) | Cod sursa (job #216799) | Cod sursa (job #1606373) | Cod sursa (job #3220012)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
const long long range_max = 1LL << 61;
long long p;
long long fp[15];
int k;
long long calc(long long n){
long long rez = 0;
for(int e = 0; e < (1 << k); e++){
long long t = 1;
int nrb = 0;
for(int i = 0; i < k; i++){
if((1 << i) & e){
t *= fp[i];
nrb++;
}
}
if(nrb & 1) rez -= n / t;
else rez += n / t;
}
return rez;
}
int cb(){
long long st = 1, dr = range_max + 5, med, poz = -1;
while(st <= dr){
med = (st + dr) / 2;
if(calc(med) >= p){
poz = med;
dr = med - 1;
}
else st = med + 1;
}
return poz;
}
int main()
{
long long n,x,d;
fin >> n >> p;
for(d = 2; d * d <= n; d++){
if(n % d == 0) fp[k++] = d;
while(n % d == 0) n /= d;
}
if(n > 1) fp[k++] = n;
fout << cb();
return 0;
}