[GDKOI2016] 小学生数学题

该博客介绍了GDKOI2016中的一道数学题目,涉及求解∑ni=11imodpk。约束条件为p≤105且pk⋅n≤1018。分析部分提出了计算性质,并采用类似计算阶乘的方法,将问题分为两部分:一是利用性质简化计算,二是应用矩阵快速幂解决自然数幂求和,达到O((k^3+kp)lognp)的时间复杂度。
摘要由CSDN通过智能技术生成

Description

ni=11imodpk

Constraint

p105
pkn1018

Analysis

首先,给出一条性质

aacb(modp)bc(modpc)

具体证明非常简单,只要考虑到

aac=kp+b=k(pc)+(bc)

那用处就是

amodp=bacmodpc=bc=(amodp)c

那这道题我们借鉴计算阶乘时的思想,提取出 p 整除的数。

Solve(n,k)=i=1n1imodpk=1pi=1np1i+0<a<pa+bpn1a+bpmodpk

然后我们分开考虑这两部分,先考虑第一部分,利用上性质(1)(2),可以得到

1pi=1np1imodpk=1pi=1np1imodpk=(1ipmodpk)pp=(p(1ipmodpk))1p=(1imodpk+1)1p=Solve(np,k+1)1p

递归求解即可,现在考虑第二部分

0<a<pa+bpn1a+bp=a=1p1b=0nap1a+bp=a=1p1b=0nap11+bpa1a=a=1p11ab=0nap11(bpa)=a=1p11ab=0napi=0(bpa)i=a=1p11ab=0napi=0(pa)ibi=a=1p11ai=0k1(pa)ib=0napbi

这里就是自然数幂求和,用 [2k×2k] 的矩阵,
一次求出所有 i Si

时间复杂度: T(n,k)=T(np,k+1)+k3+kp=(k3+kp)lognp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值