Pagini recente » Cod sursa (job #22174) | Cod sursa (job #1373932) | Cod sursa (job #711624) | Cod sursa (job #1275625) | Cod sursa (job #2801346)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
vector<int>di;
void desc(int n)
{
for(int d=2;d*d<=n;d++)
{
if(n%d==0)
{
while(n%d==0)
n/=d;
di.push_back(d);
}
}
if(n>1)
di.push_back(n);
}
int main()
{
long long n,p;
fin>>n>>p;
desc(n);
long long st=1,dr=(1LL<<62),mi,poz;
while(st<=dr)
{
mi=(st+dr)/2;
long long nr=mi;
long long cmi=mi;
for(int i=1;i<(1<<di.size());i++)
{
long long nr=0,ci=i,prod=1,x=0;
while(ci)
{
if(ci%2==1)
{
prod*=di[x];
nr++;
}
ci/=2;
x++;
}
//cout<<prod<<" ";
if(nr%2==1)
mi-=cmi/prod;
else mi+=cmi/prod;
}
if(mi>=p)
{
dr=cmi-1;
poz=cmi;
}
else st=cmi+1;
}
fout<<poz;
}