結果
| 問題 |
No.2829 GCD Divination
|
| コンテスト | |
| ユーザー |
naut3
|
| 提出日時 | 2024-08-02 23:17:59 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,282 bytes |
| コンパイル時間 | 14,840 ms |
| コンパイル使用メモリ | 402,204 KB |
| 実行使用メモリ | 522,856 KB |
| 最終ジャッジ日時 | 2024-08-02 23:19:02 |
| 合計ジャッジ時間 | 59,981 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 23 MLE * 3 |
ソースコード
#![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() && gcd(p, N) != 1 {
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.;
for &d in sieve[k as usize].iter() {
if sieve[k as usize].len() == 1 {
s += dp[d as usize];
} else if d == sieve[k as usize][0] {
let m = sieve[k as usize][1];
s += dp[d as usize] * (m - 1) as f32;
} else {
let m = sieve[k as usize][0];
s += dp[d as usize] * (m - 1) as f32;
}
}
dp[k as usize] = s;
dp[k as usize] /= (k - 1) as f32;
dp[k as usize] += (k) as f32 / (k - 1) as f32;
}
println!("{}", dp[N as usize]);
}
fn gcd(a: u32, b: u32) -> u32 {
if a < b {
return gcd(b, a);
}
if b == 0 {
return a;
} else {
return gcd(b, a % b);
}
}
naut3