Pagini recente » Cod sursa (job #1900971) | Cod sursa (job #1746528) | Cod sursa (job #3178571) | Cod sursa (job #1967055) | Cod sursa (job #476693)
Cod sursa(job #476693)
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <bitset>
using namespace std;
#define maxN 1000100
bitset <maxN> Prim;
vector < pair <int, int> > V[maxN];
int N, exp[maxN];
int pow (int number, int exp) {
if (exp == 0)
return 1;
if (exp == 1)
return number;
int x = pow(number, exp / 2);
x *= x;
return exp % 2 == 1 ? x * number : x;
}
int main () {
int i, x, j, k, product;
long long sum = 0;
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
scanf("%d", &N);
Prim.set();
for (i = 2; i <= N; i += 2) {
Prim[i] = false;
if (i % 4 == 0)
exp[i] = exp[i / 2] + 1;
else
exp[i] = 1;
V[i].push_back(make_pair(2, exp[i]));
}
for (i = 3; i <= N; i += 2)
if (Prim[i]) {
for (j = i; j <= N; j += i) {
Prim[j] = false;
if ((1LL * j) % (1LL * i * i) == 0)
exp[j] = exp[j / i] + 1;
else
exp[j] = 1;
V[j].push_back(make_pair(i, exp[j]));
}
}
for (i = 2; i <= N; ++ i) {
product = 1;
for (j = 0; j < (int) V[i].size(); ++ j)
product *= (V[i][j].first - 1) * pow(V[i][j].first, V[i][j].second - 1);
sum += product;
}
printf("%lld\n", 2LL * sum + 1);
}