Pagini recente » Cod sursa (job #622276) | Cod sursa (job #1166811) | Cod sursa (job #989535) | Cod sursa (job #1064183) | Cod sursa (job #264716)
Cod sursa(job #264716)
#include <cstdio>
const int MAX_L = 1000;
int n, p, z;
long long sol;
int f[MAX_L];
long long check(long long x)
{
long long ret = x;
for (int i = 1; i < (1 << z); ++i)
{
long long y = 1;
int q = 1;
for (int j = 0; j < z; ++j)
if (i & (1 << j))
{
y *= f[j];
q *= -1;
}
ret += q * (x / y);
}
return ret;
}
void bin(long long st, long long dr)
{
while (st < dr)
{
long long mij = st + (dr - st) / 2;
if (check(mij) >= p) dr = mij;
else st = mij + 1;
}
sol = st;
}
int main()
{
int i;
freopen("frac.in", "r", stdin);
freopen("frac.out", "w", stdout);
scanf("%d %d", &n, &p);
int m = n;
for (i = 2; i * i <= m; ++i)
{
if (m % i == 0) f[z++] = i;
for (; m % i == 0; m /= i);
}
if (m) f[z++] = m;
bin(1, (long long)1 << 61);
printf("%lld\n", sol);
}