Cod sursa(job #1451997)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 19 iunie 2015 14:31:07
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>

#define MAX_N 1000000

int phi[MAX_N + 1]; // phi[i] = numarul de nr <= n si prime cu acesta

void genPhi(int n) {
  for (int i = 1; i <= n; i++) {
    phi[i] = i;
  }
  for (int i = 2; i <= n; i++) {
    if (phi[i] == i) {
      for (int j = i; j <= n; j += i) {
        phi[j] /= i;
        phi[j] *= (i - 1);
      }
    }
  }
}

int main(void) {
  FILE *f = fopen("fractii.in", "r");
  int n;
  int s;

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

  genPhi(n);
  s = 0;
  for (int i = 1; i <= n; i++) {
    s += phi[i];
  }
  f = fopen("fractii.out", "w");
  fprintf(f, "%d\n", 2 * s - 1); // o pereche de 2 numere prime intre ele determina 2 fractii ireductibile diferite, in afara de 1/1
  fclose(f);
  return 0;
}