結果
| 問題 |
No.2829 GCD Divination
|
| コンテスト | |
| ユーザー |
naut3
|
| 提出日時 | 2024-08-02 23:10:46 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,243 bytes |
| コンパイル時間 | 11,397 ms |
| コンパイル使用メモリ | 404,880 KB |
| 実行使用メモリ | 556,156 KB |
| 最終ジャッジ日時 | 2024-08-02 23:11:06 |
| 合計ジャッジ時間 | 18,107 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | MLE * 1 -- * 34 |
ソースコード
#![allow(non_snake_case)]
#[allow(unused_imports)]
use proconio::{fastout, input, marker::*};
#[fastout]
fn main() {
input! {
N: u32,
}
let mut sieve = vec![vec![]; 10_000_010];
for p in 2u32..=10_000_000 {
if sieve[p as usize].is_empty() {
for q in (p * 2..10_000_010).step_by(p as usize) {
sieve[q as usize].push(p);
}
}
}
let mut dp = vec![0.; 10_000_010];
for k in 2u32..=N {
let mut s = 0.;
let mut cnt = 0;
for &d in sieve[k as usize].iter() {
if sieve[k as usize].len() == 1 {
s += dp[d as usize];
cnt += 1;
} else if d == sieve[k as usize][0] {
let m = sieve[k as usize][1];
s += dp[d as usize] * (m - 1) as f32;
cnt += m - 1;
} else {
let m = sieve[k as usize][0];
s += dp[d as usize] * (m - 1) as f32;
cnt += m - 1;
}
}
dp[k as usize] = s + (1 * (k - 1 - cnt)) as f32;
dp[k as usize] /= (k - 1) as f32;
dp[k as usize] += (k) as f32 / (k - 1) as f32;
}
println!("{}", dp[N as usize] - 1.);
}
naut3