自然数幂和与伯努利数 小结
最近在看自然数幂和这类问题,觉得ACdreamer这两篇博客写得不错,可以看下。
http://blog.csdn.net/acdreamers/article/details/38929067
http://blog.csdn.net/acdreamers/article/details/39941387
先对伯努利数的一些性质总结一下:
1. 伯努利数与自然数幂的关系:
2. 伯努利数递推式:
3. 其他:
更多性质可以看
题目一:
题意:
令自然数幂和为S(k,n)=1^k+2^k+...+n^kS(k,n)可以表述成:
S(k,n)=1/M*(a[k+1]*n^(k+1)+a[k]*n^k+...+a[1]*n+a[0])
给出k,求最小的正整数M,使得a[0]...a[k+1]都为整数。
限制:
1 <= k <=20
题解:
http://blog.csdn.net/whai362/article/details/43128405
题目二:
题意:
求自然数幂和。限制:
0 <= n <= 10^50; 1 <= k <= 100
题解:
题目三:
题意:
S(k,n)=1^k+2^k+...+n^k求自然数幂和对1e9+7取模。
限制:
1<= n <= 10^18; 1 <= k <= 2000
题解:
题目四:
题意:
S(k,n)=1^k+2^k+...+n^k求自然数幂和对1e9+7取模。
限制:
1<= n <= 10^18; 1 <= k <= 50000
这道题貌似要用fft求多项式的逆元,但被我用打表水过了,
具体方法是:
先O(n^2)预处理出前29000的伯努利数,只要好好优化一下6秒就可以了。
然后打出后21000的伯努利数,然后用64进制压缩。
这样一来代码量就减少到了62k左右,然后就能ac了。
这个就是本渣的做法。
题目五:
题意:
求(1^n+2^n+...+a^n)MOD(p)的值。
限制:
1 <= p <= 10000; 1 <= n <= 10^100000; 1<= a <= 10^18
思路:
1. 循环节长度为p。
2. 对i^n由于n很大,可以用指数循环节公式来降幂。
复杂度为O(plog(p))
题目六:
题意:
求(1^n+2^n+...+p^n)MOD(p)的值。
限制:
1 <= p <= 10^12; 1 <= n <= 10^100000; n是奇数
思路:
先看[x^n+(p-x)^n]MOD(p)
展开=[ x^n+ C(n,0)*p^n+C(n,1)*p^(n-1)*(-x)^1+...+C(n,n-1)*p*(-x)^(n-1) + C(n,n)*(-x)^n ]MOD(p)
=[ x^n+(-x)^n]MOD(p) + ( 中间那块 )MOD(p)
=[ x^n+(-x)^n]MOD(p)
得:
1. 如果p为奇数,ans=0
2. 如果p为偶数,ans=((p/2)^n)MOD(p)