Cod sursa(job #2647592)

Utilizator razvan.maziluMazilu Razvan razvan.mazilu Data 5 septembrie 2020 12:59:31
Problema Factorial Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <stdio.h>
#include <stdlib.h>
#define NMax 1000000

FILE *f, *g;
short int sieve[NMax];
int euler[NMax];

/*
int cmmdc(int a, int b)
{
    int r;
    while(b)
    {
        r = a%b;
        a = b;
        b = r;
    }
    while(a != b)
    {
      if(a > b)
        a = a - b;
      else
        b = b - a;
    }

    return a;
}

int main()
{
    int N, ct_fractii = 0;

    f = fopen("fractii.in", "r");
    g = fopen("fractii.out", "w");

    if(f == NULL)
    {
       printf("Eroare citire fisier");
       exit(1);
    }

    if(g == NULL)
    {
       printf("Eroare scriere fisier");
       exit(1);
    }

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

    for(int lv = 1; lv <= N; lv++)
    {
       if(lv == 1)
         ct_fractii++;

       if(lv == 2)
         ct_fractii += 2;

       if(lv > 2)
       {
          for(int i = 1; i <= lv; i++)
          {
              if(cmmdc(i,lv) == 1)
                ct_fractii += 2;
          }
       }
    }

    fprintf(g, "%d", ct_fractii);

    fclose(f);
    fclose(g);

    return 0;
}*/

int main()
{
    int N;
    long long int ct_fractii = 0;

    f = fopen("fractii.in", "r");
    g = fopen("fractii.out", "w");

    if(f == NULL)
    {
       printf("Eroare citire fisier");
       exit(1);
    }

    if(g == NULL)
    {
       printf("Eroare scriere fisier");
       exit(1);
    }

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

    /*sieve[0] = sieve[1] = 1; //punem 1 cand NU sunt prime si 0 cand sunt
    for (int i = 2; i * i <= N; i++) // Parcurgem vectorul sieve.
      if (!sieve[i]) // Dacă numărul curent este prim,
        for (int j = i * i; j <= N; j += i) // parcurgem multiplii săi
            sieve[j] = 1; // și îi marcăm drept numere compuse.
    */

    for (int i = 2; i <= N; i++)
       euler[i] = i - 1;

    for (int i = 2; i <= N; i++)
    {
       ct_fractii += euler[i];
       for (int j = 2 * i; j <= N; j += i)
        euler[j] -= euler[i];
    }


    printf("%lld", 2*ct_fractii + 1);
    fprintf(g, "%lld", 2*ct_fractii + 1);

    fclose(f);
    fclose(g);
}