Pagini recente » Cod sursa (job #1449960) | Cod sursa (job #3260313)
#include <iostream>
#include <climits>
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
int main()
{
long long n,p;
fin>>n>>p;
long long v[30000];
v[1]=1;
long long nr=1;
long long d=2;
while(d*d<=n)
{
if(n%d==0)
{
while(n%d==0)
{
n/=d;
}
for(long long i=1;i<=nr;i++)
{
v[i+nr]=-d*v[i];
}
nr*=2;
}
d++;
}
if(n>1)
{
for(long long i=1;i<=nr;i++)
{
v[i+nr]=-n*v[i];
}
nr*=2;
}
long long st=1;
long long dr=LLONG_MAX /4;
long long sol;
while(st<=dr)
{
long long m=(st+dr)/2;
long long s=0;
for(long long i=1;i<=nr;i++)
{
s+=m/v[i];
}
if(s>=p)
{
sol=m;
dr=m-1;
}
else
{
st=m+1;
}
}
fout<<sol;
return 0;
}