Pagini recente » Cod sursa (job #1171045) | Cod sursa (job #2372285) | Cod sursa (job #2759910) | Cod sursa (job #2788424) | Cod sursa (job #514501)
Cod sursa(job #514501)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 1000001
int n;
long long ciur[MAXN];
int max(int a, int b) {
return a < b ? b : a;
}
void init_ciur(int val) {
for (int i = 0; i <= n; i++) {
ciur[i] = val;
}
}
void make_fi_of_n_ciur() {
for (int i = 2; i <= n; i++) {
if (ciur[i] & 1) {
ciur[i] = i - 1;
for (int pos = i << 1; pos <= n; pos += i) {
long long aux = pos / i;
ciur[pos] *= (i - 1);
while (aux % i == 0) {
ciur[pos] *= i;
aux /= i;
}
}
}
}
}
//int get_fi(int v) {
// int to = (int)floor(sqrt((double)v));
// int contor = 2;
// int result = 1;
// if (contor > to) return v - 1;
// while (v != 1 && contor <= to) {
// if (v % contor == 0) {
// int to_mult = contor - 1;
// while (v % contor == 0) {
// to_mult *= contor;
// v /= contor;
// }
// to = (int)floor(sqrt((double)v));
// result *= to_mult / contor;
// }
// contor ++;
// }
// return v != 1 ? result * (v-1) : result;
//}
//void brute() {
// int sum = 1;
// for (int i = 2; i <= n; i++) {
// int v = get_fi(i);
// sum += 2*v;
// }
// printf("\n%d\n", sum);
//}
int main() {
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
scanf("%d", &n);
init_ciur(1);
make_fi_of_n_ciur();
/*for (int i = 2; i <= n; i++) {
printf("%d ", i);
}printf("\n");
for (int i = 2; i <= n; i++) {
printf("%d ", ciur[i]);
}printf("\n");*/
long long sum = 1;
for (int i = 2; i <= n; i++) {
sum += 2*ciur[i];
}
printf("%lld\n", sum);
/*brute();*/
return 0;
}