Pagini recente » Cod sursa (job #823169) | Cod sursa (job #2154786) | Cod sursa (job #2641933) | Cod sursa (job #1325983) | Cod sursa (job #2083698)
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef long double ld;
inline void debugMode() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
#endif // ONLINE_JUDGE
}
inline void PrintYes() { cout << "Yes"; }
inline void PrintNo() { cout << "No"; }
const double eps = 1e-7;
int Euler[1000005];
bool notPrime[1000005];
/// folosim Euler's totiem care ne va spune:
/// Euler[i] = numarul de numere prime care sunt mai mici sau egale cu i si au gcd(numar, i) = 1
/// notPrim[i] = true => elementul i nu este prim
int main()
{
debugMode();
int n;
cin >> n;
/// calculam pentru fiecare cu scrierea sub forma de produs a formulei lui Euler
/// Euler[n] = n * prod(1 - 1 / p) -> unde p este un numar prim din desc lui n
for(int i = 2; i <= n; ++i)
Euler[i] = i;
for(int i = 2; i <= n; i += 2)
Euler[i] -= Euler[i] / 2;
for(int i = 3; i <= n; i += 2) {
if(notPrime[i] == true)
continue;
for(int j = i ; j <= n; j += i) {
notPrime[j] = true;
Euler[j] -= Euler[j] / i;
}
}
ll ans = 0;
for(int i = 2; i <= n; ++i)
ans += Euler[i];
cout << 2 * ans + 1;
return 0;
}