题面
某巨犇发现了一种叫做海绵宝宝 HMBB
的神奇矩阵。
给定 i
,记 p
是第 i
个质数。
矩阵 HMBBn
的大小为 pn×pn
,同时:
HMBBn[i][j]={01(ji)≡0(modp)(ji)≡0(modp)
记 F(n,k)
为矩阵 (HMBBn)k
中所有元素之和。给定 n,k
,试求:
i=1∑nj=1∑kF(i,j)(mod109+7)
数据范围:0<n≤109,0<c,k≤105
题目链接:HDUOJ 6372: sacul
分析
考虑 Lucas 定理:
(mn)≡(mmodpnmodp)⋅(m/pn/p)(modp)≡(mmodpnmodp)⋅(m/pmodpn/pmodp)⋅(m/p2n/p2)(modp)…
不难发现其本质就是把 n
和 m
按照 p
进制进行拆位,对每一位计算组合数后再乘起来。
严格地说,记 Ni
为 n
在 p
进制下的第 i
位,Mi
为 m
在 p
进制下的第 i
位,则有:
(mn)≡∏(MiNi)(modp)
接下来我们来看看什么时候存在 (mn)≡0(modp)
。
首先,对于上面连乘式中的第 i
项,显然有 0≤Ni,Mi<p
。
- 若 Ni≥Mi
,那么 (MiNi)
一定是整数,又由于
Ni,Mi<p
,所以模 p
一定是正数(不可能存在 p
这一因子);
- 若 Ni<Mi
,那么 (MiNi)=0
,模 p
自然为 0
。
换句话说,对于 (mn)modp
,若 n
在 p
进制下的每一位都不小于 m
在 p
进制下的对应位,则有 (mn)≡0(modp)
。
貌似题目标题反过来读就是题解诶,然而比赛的时候想到这里后我就不会了 QAQ。
既然 HMBB
是一个 01
矩阵,我们不妨把它联想成一个可达性矩阵,由此可以将其对应成一张有向无权图。进一步,HMBB[i][j]
代表从 i
出发,走 1
步到达 j
的方案数。再进一步,(HMBB[i][j])k
代表从 i
出发,恰好走 k
步到达 j
的方案数。
根据上面根据 Lucas 定理得到的结论,如果 i
在 p
进制下每一位都不小于 j
在
p
进制下的对应位,那么我们就建一条有向边:i→j
。于是 F(n,k)
就变成了在包含 pn
个点的这样的图中恰好走 k
步从任意点出发到达任意点的方案总数。
现在我们考虑恰好走 j
步的路径,那么显然这条路径上有 j+1
个点,同时这条路径上每一个点都满足:每个数的 p
进制上的每一位不小于上一个数的对应位。这又回到了一个经典排列组合问题:
现有 k
个数:x1,x2,…xk
,已知对于每个 x
都有
0≤x<p
,试问满足 x1≤x2≤⋯≤xk
的排列方案有多少种?
这可转化为 x1<(x2+1)<(x3+2)<⋯<(xk+k−1)
的方案数。换句话说,就是记 yi=xi+i−1
,y1<y2<⋯<yk
的方案数,其中 0≤y<p+k−1
。显然等效于 p+k−1
种值里面取 k
种不同的值:
(kp+k−1)=(p−1p+k−1)
所以说对于每一位实际上就是上面公式里面带入 k=j+1
,我们可采取的方案数都为:
(p−1p+(j+1)−1)=(p−1j+p)
记这些数的 p
进制都有 i
位,显然这 i
个位之间是相对独立的,因此方案数为:
F(i,j)=(p−1j+p)i
那么题目所要求的值即为:
i=1∑nj=1∑k(p−1j+p)i=j=1∑ki=1∑n(p−1j+p)i
由上述分析我们已经知道答案即:
j=1∑ki=1∑n(p−1j+p)i
其中后半部分可看作一个等比数列,用等比数列公式即可直接求出(需要注意特判公比为
1
的情况)。
如果我们预处理阶乘的话,求一个组合数的的复杂度为 O(logN)
级别,因此总复杂度为 O(NlogN)
级别。
另外由实践得知,第 105
个质数为
1299709
,因此我们在处理阶乘的时候至少需要处理至 1299709+105
。
最后附上
我的代码
以供参考。
%%%