結果

問題 No.2829 GCD Divination
ユーザー begemotbegemot
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0