枚举n个位置中有多少个为数字a(设为x),剩下的位置放b。则如果sum = a * x + b * (n - x)是good number,那么答案加上C(n, x),所以唯一的问题的如何计算C(n, x)。
C(n, x) % Mod = n! / (x! * (n - x) !) % Mod= n! * (x! * (n - x)!)^(-1) % Mod。(p)^(-1)表示p对Mod的乘法逆元。因为Mod是素数,所以p^(g(Mod)) % Mod = 1,g(Mod) = Mod - 1,于是p对Mod的乘法逆元就是p^(Mod - 2),于是这里用乘法逆元用欧拉函数和快速幂求。
代码如下:
/*
* Author: stormdpzh
* Created Time: 2013/6/21 16:38:34
* File Name: c.cpp
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include