Pagini recente » Cod sursa (job #481638) | Cod sursa (job #875673) | Cod sursa (job #2215939) | Cod sursa (job #267117) | Cod sursa (job #2500229)
#include <cstdio>
#include <bitset>
#include <vector>
using namespace std;
const int NMAX = 1000505;
bitset<NMAX> notPrime;
int N;
vector<int> pr;
int lp[NMAX], phi[NMAX];
void precomputeTotientFunction() {
for (int i = 2; i < NMAX; i++) {
if (lp[i] == 0) {
lp[i] = i;
phi[i] = i - 1;
pr.push_back(i);
}
for (int j = 0; j < pr.size() && pr[j] <= lp[i] && pr[j] * i < NMAX; j++) {
lp[i * pr[j]] = pr[j];
// 1st time
if (pr[j] < lp[i]) {
phi[i * pr[j]] = phi[i] * phi[pr[j]];
} else {
phi[i * pr[j]] = phi[i] * pr[j];
}
}
}
printf("%d\n", lp[6]);
}
int main() {
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
precomputeTotientFunction();
scanf("%d", &N);
long long result = 0;
for (int i = 2; i <= N; i++) {
result += phi[i] * 2;
}
// add 1 / 1 once only
printf("%lld\n", result + 1);
return 0;
}