1. 阶乘的因数个数#
考虑一个正整数n的阶乘n!,求它有多少个质因数p,即求最大i,使n!=kpi
显然,所有p的倍数都含有至少一个因数p,从1到n的n个数中有⌊pn⌋个数是p的倍数
同样的,所有p2的倍数都含有至少两个因数p,从1到n的n个数中有⌊p2n⌋个数是p2的倍数
以此类推,所有pj的倍数都含有至少i个因数p,从1到n的n个数中有⌊pjn⌋个数是pi的倍数
当然,p2的倍数也是p的倍数,pj的倍数也是pj−1的倍数,所以我们可以认为,每个p2的倍数都在p倍数的基础上多一个因子p,每个pj的倍数都在pj−1倍数的基础上多一个因子p,那么我们就得出了最后的式子
i=⌊pn⌋+⌊p2n⌋+⌊p3n⌋+⋯
2. 二进制与组合数奇偶#
对于一个组合数Cnm=m!(n−m)!n!,要讨论它的奇偶,也就是看它分子分母含因子2的情况
设a,b,c分别为n!,m!,(n−m)!含因子2的数目
Cnmmod2={0,a>b+c1,a≤b+c
显然,a<b+c时,Cnm中会产生2的负次幂,而Cnm是一个整数,所以a不可能小于b+c
所以有
Cnmmod2={0,a=b+c1,a=b+c
那么我们来分析a,b,c
以a为例,a=⌊2n⌋+⌊22n⌋+⌊23n⌋+⋯
设n=a0×20+a1×21+a2×22+⋯+ai×2i,有
a=⌊2a0×20+a1×21+⋯+ai×2i⌋+⌊22a0×20+a1×21+⋯+ai×2i⌋+⋯+⌊2ia0×20+a1×21+⋯+ai×2i⌋=2a1×21+a2×22+⋯+ai×2i+22a2×22+a3×23+⋯+ai×2i+⋯+2iai×2i=(a1+a2×21+⋯+ai×2i−1)+(a2+a3×21+⋯+ai×2i−2)+⋯+ai=a1+a2(20+21)+a3(20+21+22)+⋯+ai(20+21+⋯+2i−1)=a0(20−1)+a1(21−1)+a2(22−1)+⋯+ai(2i−1)=∑j=0iaj(2j−1)=∑j=0iaj2j−∑j=0iaj=n−∑j=0iaj
不难发现,∑j=0iaj就是n的二进制中1的数目
同理可得,b=m−∑j=0ibj,c=n−m−∑j=0icj
则a=b+c⟺n−∑j=0iaj=m−∑j=0ibj+n−m−∑j=0icj⟺∑j=0iaj=∑j=0ibj+∑j=0icj
也就是说,n二进制中1的数目等于m二进制中1的数目和n−m二进制中1的数目之和
换句话说,m二进制中有几个1,n−m时n的二进制中就减少几个1
来到二进制减法中,对于m中某个为1的位,如果n中对应位为1,那么计算减法时n就刚好减少一个1,而如果n中对应位为0,则必然产生退位(n≥m),必然增加n中1的个数,因此,对于m中所有为1的位,只有n中每个对应位都为1时,上述式子才会成立
用按位与(&)描述这一条件就是n&m=m
综上,我们得出结论Cnmmod2={0,n&m=m1,n&m=m