Pagini recente » Cod sursa (job #1998284) | Cod sursa (job #1615864) | Cod sursa (job #2215741) | Cod sursa (job #2461331) | Cod sursa (job #2837846)
#include <bits/stdc++.h>
using namespace std;
ifstream in("frac.in");
ofstream out("frac.out");
typedef long long ll;
vector<ll> primes;
vector<ll> prod;
ll n,p,l,r,med;
int main()
{
in>>n>>p; l=n;
for(ll i=2;i*i<=l;++i)
if(l%i==0)
{
primes.push_back(i);
while(l%i==0) l/=i;
}
if(l>1) primes.push_back(l);
ll nr=primes.size();
for(ll mask=0;mask<(1LL<<nr);++mask)
{
ll app=0,add=1;
for(ll i=0;i<nr;++i)
if(mask&(1LL<<i)) ++app,
add*=primes[i];
if(app%2==0) prod.push_back(add);
else prod.push_back(-add);
}
l=1,r=(1LL<<61);
while(l<r)
{
ll ans=0;
med=(l+r)>>1;
for(ll x:prod)
if(x>0) ans+=med/x;
else ans-=med/(-x);
if(ans==p) r=med;
else if(ans<p) l=med+1;
else r=med-1;
}
out<<l<<'\n';
return 0;
}