Pagini recente » Cod sursa (job #595125) | Cod sursa (job #408266) | Cod sursa (job #772523) | Cod sursa (job #1275587) | Cod sursa (job #2256599)
#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");
int b,poz;
f>>b>>poz;
for(int 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;
}