結果
| 問題 |
No.1529 Constant Lcm
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-11-02 21:32:06 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 1,518 ms / 3,000 ms |
| コード長 | 1,640 bytes |
| コンパイル時間 | 13,545 ms |
| コンパイル使用メモリ | 400,964 KB |
| 実行使用メモリ | 168,832 KB |
| 最終ジャッジ日時 | 2024-07-17 09:39:05 |
| 合計ジャッジ時間 | 29,906 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 24 |
ソースコード
use std::collections::HashMap;
const MOD: usize = 998244353;
fn power(base: usize, times: usize) -> usize {
if times == 0 { return 1usize; }
if times == 1 { return base; }
let temp = power(base, times/2);
temp * temp % MOD * power(base, times%2) % MOD
}
fn calc(n: usize) -> Vec<HashMap<usize, usize>> {
let mut flgs = vec![true; n+1];
flgs[0] = false;
flgs[1] = false;
let mut ret = vec![HashMap::new(); n];
for i in 2..n {
if !flgs[i] { continue; }
for j in 1..=n/i {
flgs[i*j] = false;
if i * j == n { continue; }
let mut target = i*j;
let mut cnt = 0usize;
while target % i == 0 {
target /= i;
cnt += 1;
}
ret[i*j].insert(i, cnt);
}
}
ret
}
fn main() {
let mut n = String::new();
std::io::stdin().read_line(&mut n).ok();
let n: usize = n.trim().parse().unwrap();
let mut factors = vec![0usize; n];
let mapping = calc(n);
for i in 1..n {
let left = i;
let right = n-i;
for (&prime, &cnt) in mapping[left].iter() {
let cnt2 = *mapping[right].get(&prime).unwrap_or(&0usize);
factors[prime] = factors[prime].max(cnt + cnt2);
}
for (&prime, &cnt) in mapping[right].iter() {
let cnt2 = *mapping[left].get(&prime).unwrap_or(&0usize);
factors[prime] = factors[prime].max(cnt + cnt2);
}
}
let result = (0..n).filter(|&i| factors[i] > 0).map(|i| power(i, factors[i])).fold(1usize, |x, y| x*y%MOD);
println!("{}", result);
}