Cod sursa(job #1651859)

Utilizator pickleVictor Andrei pickle Data 14 martie 2016 00:33:29
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <algorithm>
#include <bitset>
#include <cmath>
#include <fstream>
#include <iostream>
#include <queue>
#include <string.h>
#include <string>
#include <vector>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
ifstream fin ("fractii.in");
ofstream fout ("fractii.out");

const int Nmax = 1000666;
int N;
char ind[Nmax], isprime[Nmax];

int main() {
  fin >> N;
  memset(ind, 1, sizeof(char)*(N+1));
  memset(isprime, 1, sizeof(char)*(N+1));

  for(int p = 2; p <= N; ++p) {
    if (isprime[p]) {
      ind[p] = -1;
      for (int q = 2*p; q <= N; q += p) {
        isprime[q] = 0;
        if (ind[q]) {
          ind[q] *= -1;
        }
      }

      for (ll q = 1ll*p*p; q <= N; q += 1ll*p*p) {
        ind[q] = 0;
      }
    }
  }

  ll ans = 1ll*N*N;
  for (int x = 2; x <= N; ++x) {
    if (ind[x]) {
      int q = N / x;
      ans += 1ll*ind[x]*q*q;
    }
  }
  fout << ans << endl;

  return 0;
}