package main import . "fmt" func main() { var n,p int Scan(&n,&p) exotogi := map[int]bool{} ans := 0 for d5 := 1; d5 <= 9; d5++ { d4 := d5 for d3 := 0; d3 <= 9; d3++ { d0 := d3 for d2 := 0; d2 <= 9; d2++ { d1 := d2 otogi := d5*1e5+ d4*1e4+ d3*1e3+ d2*1e2+ d1*1e1+ d0*1e0 emax := n / otogi for e := 1; e <= emax; e++ { ex := -e*otogi if _, ok := exotogi[ex]; !ok { ans += ex ans += 10*p ans %= p exotogi[ex] = true } } } } } Println((ans+p)%p) } /* 考察 問題文の意味がまるでわからない Ex御伽話数とは k のことなのか E のことなのか E*(-k) のことなのか わからん 絶対値N以下で求めろという文言から E*(-k) がEx御伽話数のことなのか? "Ex"御伽噺数 のExはイーエックスではなく E*のことを指すと読み取れば E*(-k) がEx御伽話数のことなのだろうけど 自分に読解力が足りなくて問題文を読み解くのが難しい 御伽噺数は共通桁ごと総当たりすれば全通り求められる(9x10x10通り≒約10^3通り?) Nを御伽話数kで割れば最大のEmaxが求まるので、1~EmaxまでEx御伽噺数を全部求めて(Emaxは大きくても10^4くらい?)、セットで重複除去して総和求めるだけ? (負数に対してmoduloを計算するのが最近の流行なのか?) Nが最小の御伽噺数より小さい場合は答えは常に0 */