結果

問題 No.2829 GCD Divination
ユーザー begemotbegemot
提出日時 2024-08-03 10:35:33
言語 C++14
(gcc 12.3.0 + boost 1.83.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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 2 ms
6,944 KB
testcase_02 AC 370 ms
42,728 KB
testcase_03 AC 2 ms
6,940 KB
testcase_04 AC 399 ms
43,032 KB
testcase_05 AC 417 ms
40,476 KB
testcase_06 AC 309 ms
35,200 KB
testcase_07 AC 277 ms
31,424 KB
testcase_08 AC 166 ms
23,304 KB
testcase_09 AC 127 ms
20,792 KB
testcase_10 AC 178 ms
27,692 KB
testcase_11 AC 7 ms
6,944 KB
testcase_12 AC 43 ms
13,380 KB
testcase_13 AC 341 ms
40,980 KB
testcase_14 AC 173 ms
29,704 KB
testcase_15 AC 120 ms
23,580 KB
testcase_16 AC 47 ms
14,208 KB
testcase_17 AC 25 ms
10,304 KB
testcase_18 AC 19 ms
10,112 KB
testcase_19 AC 32 ms
11,492 KB
testcase_20 AC 3 ms
6,940 KB
testcase_21 AC 101 ms
20,140 KB
testcase_22 AC 123 ms
22,892 KB
testcase_23 AC 192 ms
26,364 KB
testcase_24 AC 309 ms
37,756 KB
testcase_25 AC 338 ms
44,096 KB
testcase_26 AC 101 ms
22,436 KB
testcase_27 AC 249 ms
35,380 KB
testcase_28 AC 31 ms
13,180 KB
testcase_29 AC 121 ms
23,508 KB
testcase_30 AC 372 ms
43,236 KB
testcase_31 AC 23 ms
10,768 KB
testcase_32 AC 143 ms
27,784 KB
testcase_33 AC 95 ms
21,112 KB
testcase_34 AC 239 ms
35,292 KB
権限があれば一括ダウンロードができます

ソースコード

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