Cod sursa(job #213857)

Utilizator philandrewChindea Filip philandrew Data 11 octombrie 2008 20:52:45
Problema Fractii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

int prime[100000];
int np;
  
using namespace std;

int eulerphi (int nr) {
  int prod = 1;
  int c = 1;
  bool flg;
  while (c <= np) {
    flg = false;
    while (nr%prime[c] == 0){
      flg = true;
      prod *= prime[c];
      nr /= prime[c];
    }
    if (flg) { prod /= prime[c]; prod *= prime[c] - 1; }
    if (nr == 1) break;
    c++;
  }
  if (nr > 1) prod *= nr - 1;
  return prod;
}

bool eprim(int i){
  for (int j = 2; j*j<=i; j++){
    if (i%j == 0){
      return false;
    }
  }
  return true;
}

void genprimes(){
  int i;
  np = 0;
  for (i = 2; i <= 1000; i++){
    if (eprim(i)){
      np++;
      prime[np] = i;
    }
  }
}

int main(){
  int n;
  long long nr;
  ifstream fin("fractii.in");
  ofstream fout("fractii.out");
  fin >> n;
  genprimes();
  
  nr = -1;
  for (int i = 1; i <= n; i++) nr += 2*eulerphi(i);
  
  fout << nr;
  fin.close();
  fout.close();
  return 0x0;
}