题目大意:给你一个n,要你从1~2n这2n个整数中选出n个,使得选出的数中偶数的个数是偶数的方案数(mod 1000003) (n<=10^18)
这题比较神,当时想了两小时就打了个暴力,被虐残了。。。
首先可以知道ans=sigma(C(n,i)*C(n,n-i)) i是小于等于n的非负偶数,就可以变成sigma(C(n,i)^2) i是偶数
这个怎么搞呢,当n是奇数时,有sigma(C(n,i)^2)=C(2n,n) i是非负整数 sigma(C(n,i)^2)=2*sigma(C(n,k)^2) k是偶数 所以ans=C(2n,n)/2
当n是偶数时:
设n=2k
G1(n)=(1+x)^n=C(n,0)+C(n,1)x+C(n,2)x^2+...+C(n,n)x^n
G2(n)=(1-x)^n=C(n,0)-C(n,1)x+C(n,2)x^2+...+C(n,n)x^n
[[G1(n)+G2(n)]/2]^2=[C(n,0)+C(n,2)x^2+...+C(n,n)x^n]^2
显然右边这个东西里x^n的系数为sigma(C(n,i)*C(n,n-i))=sigma(C(n,i)^2) i是偶数,这个即为ans
所以[[G1(n)+G2(n)]/2]^2中x^n项系数就OK了
[[G1(n)+G2(n)]/2]^2=((1+x)^n-(1-x)^n)^2/4=[(1+x)^(2n)+(1-x)^(2n)+2(1-x^2)^n]/4
系数为[C(2n,n)+C(n,k)*(-1)^k]/2于是ans就出来了
至于这种C(a,b)%p的,因为p是质数,可以用lucas定理,就解决了