Cod sursa(job #213860)

Utilizator philandrewChindea Filip philandrew Data 11 octombrie 2008 21:00:04
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

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

int eulerphi (int nr) {
  int prod = 1;
  int c = 1;
  int i;
  while (c <= np) {
    i = prime[c];
    if (nr%prime[c] == 0){
      i = prime[c];
      while (nr%i == 0){
        prod *= i;
        nr /= i;
        if (nr == 1) break;
      }
      prod /= i;
      prod *= i - 1;
    }
    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;
}