結果
| 問題 |
No.2318 Phys Bone Maker
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-06-01 02:11:42 |
| 言語 | Go (1.23.4) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,099 bytes |
| コンパイル時間 | 11,704 ms |
| コンパイル使用メモリ | 222,704 KB |
| 実行使用メモリ | 13,640 KB |
| 最終ジャッジ日時 | 2024-12-28 14:25:14 |
| 合計ジャッジ時間 | 43,735 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 TLE * 1 |
| other | AC * 40 TLE * 5 |
ソースコード
package main
import (
"fmt"
"sort"
)
func main() {
m := 998244353
var n int
fmt.Scan(&n)
ps := primeFactorization(n)
divs := enumDivs(n)
x := len(divs)
divPs := make([]map[int]int, x)
for i, d := range divs {
divPs[i] = primeFactorization(d)
}
dp := make([]int, x)
dp[0] = 1
for i := 0; i < x; i++ {
for j := i + 1; j < x; j++ {
tmp := dp[i]
for p := range ps {
a := divPs[i][p]
b := divPs[j][p]
if a > b {
tmp = 0
break
}
if a == b {
tmp *= (b + 1)
if tmp > m {
tmp %= m
}
}
}
dp[j] += tmp
if dp[j] > m {
dp[j] %= m
}
}
}
ans := dp[x-1]
fmt.Println(ans)
}
func primeFactorization(n int) map[int]int {
m := make(map[int]int)
for n%2 == 0 {
n /= 2
m[2]++
}
for i := 3; i*i <= n; i += 2 {
for n%i == 0 {
n /= i
m[i]++
}
}
if n != 1 {
m[n]++
}
return m
}
func enumDivs(n int) []int {
res := []int{}
for i := 1; i*i <= n; i++ {
if n%i > 0 {
continue
}
res = append(res, i)
if j := n / i; j != i {
res = append(res, j)
}
}
sort.Ints(res)
return res
}