Pagini recente » Cod sursa (job #2477134) | Cod sursa (job #2139228) | Cod sursa (job #2269498) | Cod sursa (job #2529248) | Cod sursa (job #2256623)
#include <fstream>
#define MAX 2000000
#define M 1e18
using namespace std;
int k,semn[MAX+5],n;
long long prod[MAX+5],v[MAX+5];
long long pozitie(long long a)
{
int maxi=(1<<n);
long long card=a;
for(int i=1;i<maxi;i++)
card=card+semn[i]*a/prod[i];
return card;
}
int main()
{
ifstream f("frac.in");
ofstream g("frac.out");
long long b,poz;
f>>b>>poz;
for(long long i=2;i*i<=b;i++)
{
if(b%i==0)
{
while(b%i==0)
b/=i;
v[++n]=i;
}
}
if(b>1)
v[++n]=b;
int maxi=(1<<n);
for(int i=1;i<maxi;i++)
{
long long m=0;
prod[i]=1;
for(int j=0;j<n;j++)
if((1<<j)&i)
{
m++;
prod[i]*=v[j+1];
}
if(m%2==0)
semn[i]=1;
else
semn[i]=-1;
}
long long st=1,dr=M;
while(st<dr)
{
long long mij=(st+dr)/2;
if(pozitie(mij)>=poz)
dr=mij;
else
st=mij+1;
}
g<<st;
return 0;
}