diff --git a/Luogu/T243086/T243086.cpp b/Luogu/T243086/T243086.cpp new file mode 100644 index 00000000..9726471b --- /dev/null +++ b/Luogu/T243086/T243086.cpp @@ -0,0 +1,43 @@ +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +int n, p, primes[10000005], phi[10000005]; +bool vis[10000005]; +long long ans; + +void get_eulers(int n) { + phi[1] = 1; + for (int i = 2; i <= n; i++) { + if (!vis[i]) { + primes[p++] = i; + phi[i] = i - 1; + } + for (int j = 0; primes[j] * i <= n; j++) { + vis[primes[j] * i] = true; + if (i % primes[j] == 0) { + phi[primes[j] * i] = phi[i] * primes[j]; + break; + } + phi[primes[j] * i] = phi[i] * (primes[j] - 1); + } + } +} + +int main() { + std::ios::sync_with_stdio(false); + + cin >> n; + + get_eulers(n); + + for (int i = 2; i <= n; i++) { + ans += phi[i]; + } + + cout << ans << endl; + + return 0; +}