T 组数据,每组数据给出 n,a,p,求 n∑i=1iai 对 p 取模的值。
部分分
直接暴力求和可以拿到 15 分
另外 10% 的数据 a=1,不难通过数据计算得到答案为 n(n+1)2
另外 15% 的数据满足 1⩽n⩽106,所有问题 a,p 都相同,可以先把 n⩽106 的结果全部计算出来,存到数组里面,询问的时候直接查表
数学方法
不难通过计算得到最后的答案为 a(1−an)(1−a)2−nan+11−a
由于分母部分出现了 1−a,因此当 gcd(p,1−a)=1 的时候存在 1−a 的逆元,此时可以使用公式求解
可以得到 p 是一个质数的 30 分
分治法
先考虑用递归分治求 an,令 k=⌊n2⌋,q=[nmod2=1],即:当 n 为偶数时q=0,n 为奇数时 q=1,则 an=ak×ak×aq 可以在 O(logn) 时间内求出 an
接下来考虑 g(n)=a+a2+⋯+an,同样的,使用分治先计算得到 g(k) 的值,发现 g(k) 与 g(n) 之间缺了 ak+1+ak+2+ak+3+⋯+a2k+qan,前面 k 项的和可以表示为 akg(k),因此得到 g(n)=(1+ak)g(k)+qan
有了上面的方法之后,计算 a+2a2+⋯+nan 就显得轻车熟路了。先计算 f(k),缺的项为 (k+1)ak+1+(k+2)ak+2+⋯+2ka2k+qnan,前面 k 项可以提公因式 ak,再展开前面的 k+i,得到 (k+1)ak+1+(k+2)ak+2+⋯+2ka2k=ak(ka+ka2+⋯+kak+a+2a2+⋯+kak)=kakg(k)+akf(k),因此 f(n)=f(k)+kakg(k)+akf(k)+qnan
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】