传送门
前置知识
直接说一下卢卡斯定理:
C_{n}^{r}=C_{n\ mod\ p}^{r\ mod\ p}\times C_{n/p}^{r/p}\ mod\ p 。
我们看每个地方的贡献次数。
从下往上推贡献次数是 c_{i,j}=c_{i-1,j}+c_{i-1,j-1} 。
这是不是和杨辉三角的公式一样。
所以贡献就是杨辉三角,杨辉三角是越中心越大,所以我们把中间的数放最大的,一次类推。
核心代码:
for(int i=1;i<=n/2;++i) ans[i]=i*2-1,ans[n-i+1]=i*2;
if(n%2) ans[n/2+1]=n;
for(int i=1;i<=n;++i) sum+=lucas(i-1,n-1)*ans[i],sum%=p;