Cod sursa(job #1795586)

Utilizator Coroian_DavidCoroian David Coroian_David Data 2 noiembrie 2016 17:58:12
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>

#include <cstdio>

using namespace std;

FILE *f, *g;

int n;

struct numere
{
    long long euler;
};

numere e[1000001];

long long rez;

void ciur()
{
    int i, j;

  //  e[1].sum = e[1].prod = 1;

    for(i = 1; i <= n; i ++)
        e[i].euler = i;

    for(i = 2; i <= n; i += 2)
    {
        e[i].euler /= 2;
    }

    for(i = 3; i <= n; i += 2)
    {
        if (e[i].euler == i)
            for(j = i; j <= n; j += i)
            {
                e[j].euler = e[j].euler / i * (i - 1);
            }
    }

   // for(i = 1; i <= n; i ++)
  //      printf("*%d ", e[i].euler);
}

void readFile()
{
    f = fopen("fractii.in", "r");

    fscanf(f, "%d", &n);

    fclose(f);
}

void solve()
{
    int i;

  //  printf("%d %d\n", n, e[n].euler);

   // rez = e[n].euler;

   rez = 1 + e[n].euler * 2;

    for(i = 2; i < n; i ++)
    {
       /* printf("%d\n", rez);

        rez += e[i].euler;

        printf("%d\n", rez);

        int x = n - i;

        rez += (x - (x * e[i].sum / e[i].prod));*/

      //  printf("%lld\n", rez);

        rez += e[i].euler * 2;
    }
}

void printFile()
{
    g = fopen("fractii.out", "w");

    fprintf(g, "%lld\n", rez);

    fclose(g);
}

int main()
{


    readFile();

        ciur();

    solve();

    printFile();

    return 0;
}