题意
求有多少个 n n n位十进制数(可以有前导零),满足模 p p p等于 0 0 0且各位数字之和不超过 m m m。
n ≤ 1 0 9 , p ≤ 16 , m ≤ 15000 n\le 10^9,p\le 16, m\le 15000 n≤109,p≤16,m≤15000
分析
注意到第 i i i位贡献的系数为 1 0 i m o d p 10^i\bmod p 10imodp,两位的贡献不同当且仅当对应系数不同。因此可以把数位按照系数分类。设 n u m i num_i numi表示有多少位满足贡献系数为 i i i。 n u m i num_i numi可以通过求 1 0 k 10^k 10k模 p p p的周期来求出。
可以用倍增FFT求出 f i , j f_{i,j} fi,j表示选了 n u m i num_i numi个 0 0 0到 9 9 9之间的数,和为 j j j的方案数。显然 f i , j f_{i,j} fi,j的每种方案中,选取数字乘上对应系数之和模 p p p的值为 i j m o d p ij\bmod p ij