結果
問題 | No.2829 GCD Divination |
ユーザー | begemot |
提出日時 | 2024-08-03 10:35:33 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 417 ms / 2,000 ms |
コード長 | 616 bytes |
コンパイル時間 | 798 ms |
コンパイル使用メモリ | 66,496 KB |
実行使用メモリ | 44,096 KB |
最終ジャッジ日時 | 2024-08-03 10:35:41 |
合計ジャッジ時間 | 8,111 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 |
ソースコード
#include <iostream> typedef long long ll; const int MAXN = 1e7 + 5; using namespace std; double f[MAXN]; int N, phi[MAXN]; double dfs(int a) { if (f[a] || a == 1) return f[a]; for (int i = 1; i < a; ++i) { if (a % i == 0) { f[a] += phi[a / i] * (dfs(i) + 1.0); } } f[a] = (f[a] + 1.0) / (a - 1.0); return f[a]; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; f[1] = 0; for (int i = 1; i <= N; ++i) phi[i] = i; for (int i = 2; i <= N; ++i) { if (phi[i] == i) { phi[i]--; for (int j = i + i; j <= N; j += i) phi[j] -= phi[j] / i; } } cout << dfs(N) << endl; return 0; }