如何找到以 M 为模的均匀分布的二项式系数的总和?
IE。( n C a + n C a+r + n C a+2r + n C a+3r + ... + n C a+kr ) % M = ?
给定:0 <= a < r, a + kr <= n < a + (k+1)r, n < 10 5 , r < 100
我的第一次尝试是:
int res = 0;
int mod=1000000009;
for (int k = 0; a + r*k <= n; k++) {
res = (res + mod_nCr(n, a+r*k, mod)) % mod;
}
但这不是有效的。所以在阅读了这里
和这篇论文之后, 我发现上面的总和相当于:
summation[ω -ja * (1 + ω j ) n / r], for 0 <= j < r; ω = e i2π/r是一个原始的 r th单位根。
在 Order(r) 中找到这个总和的代码是什么?
编辑:n 可以达到 10 5并且 r 可以达到 100。
原始问题来源:https
://www.codechef.com/APRIL14/problems/ANUCBC比赛问题编辑:https
: //discuss.codechef.com/t/anucbc-editorial/5113 6年后重访此帖后来,我不记得我是如何将原始问题陈述转换为我的版本的,尽管如此,我还是分享了原始解决方案的链接,以防有人想看看正确的解决方法。