Pagini recente » Cod sursa (job #377570) | Cod sursa (job #2292874) | Cod sursa (job #419705) | Cod sursa (job #1984843) | Cod sursa (job #1024725)
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
bool ciur[1000000];
long long m;
long long k;
long long v[78498];
void ciurul()
{
long long p, nr=0, j, i, r;
for(i=2; i<=1000000; i++)
ciur[i]=true;
r=1000;
for(p=2; p<=r; p++)
{
if(ciur[p]==1)
for(j=p*p; j<=1000000; j+=p)
ciur[j]=false;
}
for(i=2;i<=1000000;i++)
if(ciur[i]==true)
{v[nr]=i; nr++;}
}
long long fi( long long u)
{
long long i,t, p,r, w[78498],j;
i=0;
p=0;
r=1;
while(v[i]<=m)
{
if(m%v[i]==0)
{
w[p]=v[i]; p++;
}
i++;
}
long long s=0;
for(i=0;i<(1<<p);i++)
{ r=1;
t=0;
for(j=0;j<=p-1;j++)
if((i>>j)%2==1)
{r*=w[j];
t++;}
if(t%2==0)
s+=u/r;
else
s-=u/r;
}
return s;
}
long long binary_search()
{
long long i, pas=(long long)1<<61;
for(i=0;pas;pas>>=1)
{
if((fi(i+pas))<=k-1)
i+=pas;
}
return i+1;
}
int main()
{
ifstream f("frac.in");
ofstream g("frac.out");
ciurul();
f>>m>>k;
int i;
g<<binary_search();
}