Pagini recente » Cod sursa (job #1019199) | Cod sursa (job #2477232) | Cod sursa (job #1150041) | Cod sursa (job #3195854) | Cod sursa (job #1025268)
#include <iostream>
unsigned a[1000001];
unsigned cmmdc(unsigned i, unsigned j)
{
if (!i)
return j;
if (!j)
return i;
return cmmdc(j, i%j);
}
unsigned euleri(unsigned y, unsigned u, unsigned l)
{
if (y == 1 || u == 1)
{
for (int j = l - 2; j >= 2; a[j] = 0, j--);
return 1;
}
if (a[u])
return euleri(y, u - 1, l);;
unsigned c = cmmdc(y, u);
if (c>1)
for (unsigned i = u - c; i >= 2; a[i] = 1, i -= c);
return (c == 1) + euleri(y, u - 1, l);
}
unsigned eulerp(unsigned y, unsigned u, unsigned l)
{
if (u < 2)
{
for (int j = l - 1; j >= 2; a[j] = 0, j--);
return 1;
}
if (a[u])
return euleri(y,u-1,l);
unsigned c = cmmdc(y, u);
if (c >1)
for (unsigned i = u - c; i >= 2; a[i] = 1, i -= c);
return (c == 1) + eulerp(y, u - 2, l);
}
void main()
{
unsigned n, x = 0;
/*std::ifstream f("fractii.in");
f >> n;
f.close();*/std::cin >> n;
for (unsigned i = 1; i <= n; i += 2)
x += euleri(i, i - 1, i - 1) + eulerp(i + 1, i, i);
x -= (n % 2) ? eulerp(n + 1, n, n) : 0;
/*std::ofstream g("fractii.out");
g << x * 2 - 1;
g.close();*/std::cout << 2 * x - 1;
}