Pagini recente » Cod sursa (job #2603899) | Cod sursa (job #1887097) | Cod sursa (job #3194401) | Cod sursa (job #764586) | Cod sursa (job #1025659)
#include <fstream>
unsigned a[999999];
unsigned cmmdc(unsigned i, unsigned j)
{
while (j)
{
unsigned x = j;
j = i%j;
i = x;
}
return i;
}
unsigned euleri(unsigned y, unsigned u, unsigned l)
{
if (y == 1)
return 1;
if(u == 1)
{
for (int j = l ; 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 euleri(y, u - 1, l);
}
if (y - u != 1)
{
unsigned k = 0;
for (unsigned i = y - u; i <= u - 1; i *= y - u)
{
if (!a[i])
{
a[i] = 1;
k++;
}
}
return k + 1 + euleri(y, u - 1, l);
}
return 1 + euleri(y, u - 1, l);
}
unsigned eulerp(unsigned y, unsigned u, unsigned l)
{
if (u < 2)
{
for (int j = l ; j >= 2; a[j] = 0, j--);
return 1;
}
if (a[u])
return eulerp(y, u - 2, l);
unsigned c = cmmdc(y, u);
if (c !=1)
{
for (unsigned i = u - c; i >= 2; a[i] = 1, i -= c);
return eulerp(y, u - 2, l);
}
if (y - u != 1)
{
unsigned k = 0;
for (unsigned i = y - u; i <= u - 1; i *= y - u)
{
if (!a[i])
{
a[i] = 1;
k++;
}
}
return k + 1 + eulerp(y, u - 2, l);
}
return 1 + eulerp(y, u - 2, l);
}
int main()
{
unsigned n, x = 0;
std::ifstream f("fractii.in");
f >> n;
f.close();
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();
}