hackerrank infinitum10 Fun with 1010

本文针对一个具体的组合数学问题,提出了有效的解决策略。通过对问题的分解和组合数性质的应用,逐步推导出了求解特定组合数表达式的公式。该文不仅详细展示了如何计算涉及大数的组合数问题,还介绍了Lucas定理的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意

给定N,M,求出

i=1Mj=1i(Nj)3mod2000003

数据范围

1NM1012

题解

首先,对于i>N的情况,显然他们的和就等于(MN)(2N1)3,那么接下来就考虑怎么求

i=0Nj=1i(Nj)3=i=0Nj=0i(Nj)13=i=0Nj=0i(Nj)33j=0i(Nj)2+3j=0i(Nj)1


Ai=ij=0(Nj)
S1=Ni=0Ai
S2=Ni=0A2i
S3=Ni=0A3i

只需要把这三个东西求出来就好了。

另外设P1=A0AN1+A1AN2++AN1A0,先考虑怎么把P1求出来。

P1=A0An1++An1A0=[(n0)]×[(n1)++(nn)]+[(n0)+(n1)]×[(n2)++(nn)]    ++[(n1)++(nn1)]×[(nn)]=j<k(nj)(nk)(kj)=r=1nrkj=r(nj)(nk){[xr]((1+1x)n(1+x)n)}=r=1nr(2nn+r)=r=1nr(2nnr)=nr=1n(2nnr)r=1n(nr)(2nnr)=n×[22n(2nn)]22n×[22n12(2n1n1)]2=n(2nn)2

求出P1后问题就简单很多了,我们逐个来求S1,S2,S3

S1S2S3=i=0nAi=(A0+An1)+(A2+An2)++(An1+A0)2+An=n2n1+2n=(n+2)2n1=i=0nA2i=A0(2nAn1)++An1(2nA0)+A2n=2n(A0++An)(A0An1++An1A0)=2nS1P1=i=0nA3i=A30+A3n1+A31+A3n2++A3n1+A302+A3n=(A0+An1)(A20A0An1+A2n1)+2+A3n=2n(A20+A21++A2n)2n1P1=2nS2P1

然后这题求完这些东西后就做完啦。求组合数时用lucas即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值