Mai intai trebuie sa te autentifici.
Cod sursa(job #1651856)
Utilizator | Data | 14 martie 2016 00:14:14 | |
---|---|---|---|
Problema | Fractii | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.88 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;
ind[q] ? ind[q] *= -1 : 0;
}
for (ll q = 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;
}