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