Cod sursa(job #2780729)

Utilizator YusyBossFares Yusuf YusyBoss Data 7 octombrie 2021 19:14:29
Problema Fractii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define NMAX 1000000

using namespace std;

ifstream cin ("fractii.in");
ofstream cout ("fractii.out");

int divizor[NMAX + 1];

void ciur(int n) {
  int i, j;

  for (i = 2; i * i <= n; i++)
    if (divizor[i] == 0) {
      for (j = i * i; j <= n; j += i)
        divizor[j] = i;
      divizor[i] = i;
    }

  for (i = 1; i <= n; i++)
    if (divizor[i] == 0)
      divizor[i] = i;
}

int phi(int val) {
  int d, rez;

  rez = val;
  while (val > 1) {
    d = divizor[val];
    while (val % d == 0)
      val /= d;
    rez = rez / d * (d - 1);
  }

  return rez;
}

int main() {
  int n, i, j;
  long long sol;
  cin >> n;

  ciur(n);
  sol = 1;
  for (i = 2; i <= n; i++)
    sol += 2 * phi(i);
  cout << sol;
  return 0;
}