Pagini recente » Cod sursa (job #567123) | Cod sursa (job #2325240) | Cod sursa (job #1487635) | Cod sursa (job #782304) | Cod sursa (job #2871878)
#include <fstream>
#include <bitset>
using namespace std;
long long D[60],sir[1000000];
bitset <10000005> ciur;
long long n,p,st=1,dr=1000000000000000000LL,retin;
long long d=2,ok=0,cnt=0,cn;
long long raspuns(long long a,long long b)
{
long long rez=0;
for(int i=0;i<(1<<cnt);i++)
{
long long p=1,nr=0;
for(int j=0;j<cnt;j++)
{
if(i&(1<<j))
{
nr++;
p*=D[j];
}
}
if(nr%2==0)
rez+=a/p;
else
rez-=a/p;
}
return rez;
}
int main()
{
int cate=0;
ifstream cin("frac.in");
ofstream cout("frac.out");
cin>>n>>p;
cn=n;
while(d*d<=cn)
{
while(cn%d==0)
{
cn/=d;
ok=1;
}
if(ok==1)
D[cnt++]=d;
ok=0;
d++;
}
if(cn>1)
D[cnt++]=cn;
while(st<=dr)
{
long long mij=(st+dr)/2;
if(raspuns(mij,n) >= p)
{
retin = mij;
dr=mij-1;
}
else
st=mij+1;
}
cout<<retin;
return 0;
}