問題はこちら
問題概要
とが与えられる. 以上以下の整数からなる数列として考えられるもの全てについて, その数列のすべての要素のの総和をで割った余りを求めよ.
思考の流れ
ありうる数列は個あるらしいので, 列挙は無理.
そうなると「全列挙できない場合は寄与分を考える」が使えそう.
の各について, が何回足されるかを考える.
がになるときってどんなとき?
数列の全要素がで割り切れ, で割り切れないとき.
で割り切れるものからのいずれかで割り切れるものを引けばいい.
数列の全要素がで割り切れるような数列の個数は個.
数列の全要素がのいずれかで割り切れる数列の個数は?
(包除原理か?無理...)
ここで, 大きいから順に「数列の全要素がで割り切れ, で割り切れないような数列の数」を求めていくと, を求めたいときに, が既に求まっている(それぞれ重複カウントはない)のでから引けば求められそう.
ちなみに, これを求めるにはかかりそうだが, よくみると調和級数の和になっているのででいける.
提出プログラム
https://atcoder.jp/contests/abc162/submissions/11865176
感想
思考の流れの4つ目の矢印が越えられなかった. 包除原理かと思ったり, の小さい方からが1になるような数列の個数を求めてどうにかしようとしてたりしてしまった.
を求めるために,Xより大きいものが必要なら大きい順に求めていけばいいことを学んだ.