Cod sursa(job #2102489)

Utilizator TimoteiCopaciu Timotei Timotei Data 8 ianuarie 2018 22:02:21
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;

ifstream fin("fractii.in");
ofstream fout("fractii.out");
int v[1000005], p[80000];

void mark_prim_numbers()
{
    int nr = 0;
    for(int i = 2; i <= 500000; ++i)
        if(!v[i]){
          nr++;
          p[nr] = i;
          for(int j = 2; i * j <= 1000000; ++j){
             v[i * j] = 1;
          }
        }
}
int main()
{
   int n;
   fin >> n;
   mark_prim_numbers();
   v[1] = 1;
   int nr;
   for(int i = 2; i <= 1000000; ++i)
      if(!v[i]) v[i] = i - 1;
        else v[i] = 0;
   int x, y, sum = 3;
   for(int i = 4; i <= n; ++i){
    if(!v[i]){
        nr = 1;
        x = i;
        y = 1;
        while(i % p[nr] != 0) nr++;
        while(x % p[nr] == 0){
            x /= p[nr];
            y *= p[nr];
        }
        y /= p[nr];
        v[i] = y * (p[nr] - 1) * v[x];
        sum += v[i];
    }
    else sum += v[i];
   }
   fout << 1 + 2 * sum;
   return 0;
}