問題はこちら
問題概要
から
まで番号が付いた人を空でない
個の集合に分ける.
で割った余りが等しい人は同じ集合に含まれないような分け方の総数を求めよ.
解説
包除原理
集合も区別して考え,最後にで割った余りが
であるような番号の人を
個の集合に分けます.このとき,1つの集合には高々1人含まれる(1人もいない集合があってもいい).この分け方の数は,
を
で割った余りが
であるような番号の人の数として,
となります.
すべてのに対してこの値の積を求めると,満たすべき条件のうち「集合は空でない」以外の条件を満たすような分け方の数が分かります.以下,「分け方」を「集合は空でない」以外の条件を満たすような分け方のこととします.
後は包除原理で解けます.
を「
番目の集合が空でないような分け方」の集合とします.
が求めるものです.
が同じなら
の値は同じであり,
のとき,
であるので
となります.
で割ったものが答えとなります.
を前計算しておくと
.
さらなる高速化
となります.
であるので,は
で求まります.
したがって,高速な畳み込みを行えばで解けます.
提出プログラム
https://atcoder.jp/contests/abc217/submissions/25589928https://atcoder.jp/contests/abc217/submissions/25616429