#include #include using namespace std; using namespace atcoder; #define all(v) v.begin(), v.end() #define SORT(v) sort(v.begin(), v.end()) #define RSORT(v) sort(v.rbegin(), v.rend()) #define REVERSE(v) reverse(v.begin(), v.end()) #define ll long #define ld long double #define int ll // 1 以上 N 以下の整数が素数かどうかを返す vector Eratosthenes(int N) { // テーブル vector isprime(N + 1, true); // 0, 1 は予めふるい落としておく isprime[0] = isprime[1] = false; // ふるい for (int p = 2; p <= N; ++p) { // すでに合成数であるものはスキップする if (!isprime[p]) continue; // p 以外の p の倍数から素数ラベルを剥奪 for (int q = p * 2; q <= N; q += p) { isprime[q] = false; } } // 1 以上 N 以下の整数が素数かどうか return isprime; } int32_t main() { int n; cin >> n; auto isprime = Eratosthenes(1e6 + 100); int ans = 0; for (int i = 0; i < isprime.size(); i++) { if (isprime[i]) { for (int j = i * i; j <= n; j *= i) { ans += j; } } } cout << ans << endl; }