結果
問題 |
No.1809 Divide NCK
|
ユーザー |
|
提出日時 | 2022-09-29 00:33:19 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 12 ms / 2,000 ms |
コード長 | 1,202 bytes |
コンパイル時間 | 14,034 ms |
コンパイル使用メモリ | 387,412 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-12-22 17:53:48 |
合計ジャッジ時間 | 14,944 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
use std::collections::HashMap; fn main() { let mut nkm = String::new(); std::io::stdin().read_line(&mut nkm).ok(); let nkm: Vec<usize> = nkm.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nkm[0]; let k = nkm[1]; let m = nkm[2]; let mut factors = HashMap::new(); let mut base = m; for i in 2..=(m as f64).sqrt().floor() as usize { while base % i == 0 { base /= i; *factors.entry(i).or_insert(0usize) += 1; } } if base > 1 { factors.insert(base, 1); } let startn = n - k; let endn = n; let startd = 0; let endd = k; let mut result = 1usize << 60; for (&val, &cnt) in factors.iter() { let mut num_cnt = 0usize; let mut denom_cnt = 0usize; let mut base = val; while endd / base > startd / base { denom_cnt += endd / base - startd / base; base *= val; } let mut base = val; while endn / base > startn / base { num_cnt += endn / base - startn / base; base *= val; } result = result.min((num_cnt - denom_cnt) / cnt); } println!("{}", result); }