Pagini recente » Cod sursa (job #1960638) | Cod sursa (job #1816059) | Cod sursa (job #1661606) | Cod sursa (job #2415894) | Cod sursa (job #1142191)
#include <fstream>
using namespace std;
ifstream in("frac.in");
ofstream out("frac.out");
long long v[20];
int np;
inline long long f(long long n)
{
long long sum, prod, nc;
int i, j;
sum = 0;
for(i = 0; i < (1 << np); i++)
{
nc = 0;
prod = 1;
for(j = 0; j < np; j++)
if(i & (1 << j))
{
nc++;
prod *= v[j];
}
if(nc % 2)
sum -= n/prod;
else
sum += n/prod;
}
return sum;
}
int main()
{
long long n, p, nnew, nrprim, pas, i;
in>>n>>p;
if(n == 1)
{
out<<p<<'\n';
return 0;
}
np = 0;
nnew = n;
nrprim = 2;
if(nnew % nrprim == 0)
{
v[np] = nrprim;
np++;
while(nnew % nrprim == 0)
nnew /= nrprim;
}
nrprim = 3;
while(nrprim * nrprim <= nnew)
{
if(nnew % nrprim == 0)
{
v[np] = nrprim;
np++;
while(nnew % nrprim == 0)
nnew /= nrprim;
}
nrprim += 2;
}
if(nnew != 1)
{
v[np] = nnew;
np++;
}
pas = 1LL << 61;
i = 0;
while(pas)
{
if(f(i + pas) < p)
i += pas;
pas /= 2;
}
out<<i + 1<<'\n';
return 0;
}