結果
| 問題 | No.2249 GCDistance |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-02 16:06:08 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0) |
| 結果 |
AC
|
| 実行時間 | 166 ms / 5,000 ms |
| + 7µs | |
| コード長 | 1,264 bytes |
| 記録 | |
| コンパイル時間 | 3,475 ms |
| コンパイル使用メモリ | 335,960 KB |
| 実行使用メモリ | 120,708 KB |
| 最終ジャッジ日時 | 2026-09-02 16:06:19 |
| 合計ジャッジ時間 | 7,705 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 10 |
ソースコード
#include <bits/stdc++.h>
#ifndef EULER_PHI_HPP
#define EULER_PHI_HPP
#include <cassert>
#include <vector>
std::vector<int> euler_phi(int n) {
assert(0 < n);
std::vector<int> prime, phi(n + 1);
std::vector<char> is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;
phi[1] = 1;
for (auto i = 2; i <= n; ++i) {
if (is_prime[i]) {
prime.push_back(i);
phi[i] = i - 1;
}
for (auto p : prime) {
if (i * p > n) {
break;
}
is_prime[i * p] = false;
if (i % p == 0) {
phi[i * p] = phi[i] * p;
break;
} else {
phi[i * p] = phi[i] * phi[p];
}
}
}
return phi;
}
#endif // EULER_PHI_HPP
int main() {
std::cin.tie(0)->sync_with_stdio(0);
constexpr auto NMAX = 10'000'000;
auto phi = euler_phi(NMAX);
std::vector<long long> pref(NMAX + 1);
for (auto i = 2; i <= NMAX; ++i) {
pref[i] = 2 * i - 2 - phi[i];
}
for (auto i = 2; i < NMAX; ++i) {
pref[i + 1] += pref[i];
}
int T;
std::cin >> T;
while (T--) {
int N;
std::cin >> N;
std::cout << pref[N] << "\n";
}
}