Cod sursa(job #2781291)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 8 octombrie 2021 22:40:44
Problema Fractii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 1000000

int ciur[MAXN + 1];

int phi(int i){
  int p, imp, tci, ci;
  ci = i;
  p = 1;
  imp = 1;
  tci = 0;
  while(ciur[i] != 0){
    if(ciur[i] != tci){
      p = p * (ciur[i] - 1);
      imp = imp * ciur[i];
      tci = ciur[i];
    }
    i /= ciur[i];
  }
  if(i != tci){
    p = p * (i - 1);
    imp = imp * i;
  }
  return (ci / imp) * p;
}

int main()
{
    FILE *fin, *fout;
    int n, i, j;
    long long s;
    fin = fopen("fractii.in", "r");
    fscanf(fin, "%d", &n);
    fclose(fin);
    for(i = 2; (i * i) <= n; i++){
      if(ciur[i] == 0){
        for(j = i * i; j <= n; j += i){
          if(ciur[j] == 0){
            ciur[j] = i;
          }
        }
      }
    }
    s = 1;
    for(i = 2; i <= n; i++){
      s = s + phi(i) * 2;
    }
    fout = fopen("fractii.out", "w");
    fprintf(fout, "%lld", s);
    fclose(fout);
    return 0;
}