結果

問題 No.2829 GCD Divination
ユーザー magurofly
提出日時 2024-08-02 21:54:13
言語 Rust
(1.83.0 + proconio)
結果
WA  
実行時間 -
コード長 567 bytes
コンパイル時間 12,412 ms
コンパイル使用メモリ 405,040 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-08-02 21:54:51
合計ジャッジ時間 36,377 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 4 WA * 31
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: variable `N` should have a snake case name
  --> src/main.rs:16:3
   |
16 |         N: usize,
   |         ^ help: convert the identifier to snake case: `n`
   |
   = note: `#[warn(non_snake_case)]` on by default

ソースコード

diff #

use proconio::input;
use std::collections::HashMap;

fn gcd(x: usize, y: usize) -> usize {
	if x < y {
		return gcd(y, x);
	}
	if y == 0 {
		return y;
	}
	gcd(y, x % y)
}

fn main() {
	input! {
		N: usize,
	}
	
	let mut dp = HashMap::new();
	fn rec(dp: &mut HashMap<usize, f64>, n: usize) -> f64 {
		if n == 1 {
			return 0.0;
		}
		if let Some(&ans) = dp.get(&n) {
			return ans;
		}
		let mut sum = 1.0;
		for i in 1 .. n {
			sum += 1.0 + rec(dp, gcd(n, i));
		}
		let ans = sum / (n - 1) as f64;
		dp.insert(n, ans);
		ans
	}
	
	println!("{}", rec(&mut dp, N));
}
0