传送门:loj138


题解

被标题坑进去,断断续续做了一天。。。确实是“类欧几里得算法”啊。。。

原题解-fjzzq2002

设答案为函数f(a,b,c,n,k1,k2)=i=0nik1ai+bck2f(a,b,c,n,k_1,k_2)=\\sum\\limits_{i=0}^ni^{k_1}\\lfloor\\dfrac{ai+b}{c}\\rfloor^{k_2}f(a,b,c,n,k1,k2)=i=0nik1cai+bk2

考虑以下情况:

  • ai+bc\\lfloor\\dfrac{ai+b}{c}\\rfloorcai+b为常量(a=0a=0a=0an+bc=0\\lfloor\\dfrac{an+b}{c}\\rfloor=0can+b=0),直接拉格朗日插值算出i=0nik1\\sum\\limits_{i=0}^ni^{k_1}i=0nik1即可。

  • aca\\geq cacbcb\\geq cbcf(a,b,c,n,k1,k2)=i=0nik1(aci+bc+i(a%c)+b%cc)k2f(a,b,c,n,k_1,k_2)=\\sum\\limits_{i=0}^ni^{k_1}(\\lfloor\\dfrac{a}{c}\\rfloor·i+\\lfloor\\dfrac{b}{c}\\rfloor+\\lfloor\\dfrac{i·(a\\%c)+b\\%c}{c}\\rfloor)^{k_2}f(a,b,c,n,k1,k2)=i=0nik1(cai+cb+ci(a%c)+b%c)k2,二项式展开一下得到若干λi=0nik1(i(a%c)+b%cc)k2\\lambda\\sum\\limits_{i=0}^n i^{k_1} (\\lfloor\\dfrac{i·(a\\%c)+b\\%c}{c}\\rfloor)^{k_2}λi=0nik1(ci(a%c)+b%c)k2,迭代求解f(a%c,b%c,n,k1,k2)f(a\\%c,b\\%c,n,k_1,k_2)f(a%c,b%c,n,k1,k2)即可。

  • 不满足上面两种情况(a&lt;c,b&lt;ca&lt;c,b&lt;ca<c,b<c),把ik2i^{k_2}ik2转成j=0i1(j+1)k2jk2\\sum\\limits_{j=0}^{i-1}(j+1)^{k_2}-j^{k_2}j=0i1(j+1)k2jk2(设0k2=00^{k_2}=00k2=0)。
    m=an+bc&gt;0m=\\lfloor\\dfrac{an+b}{c}\\rfloor&gt;0m=can+b>0,则
     f(a,b,c,n,k1,k2)\\ \\quad f(a,b,c,n,k_1,k_2) f(a,b,c,n,k1,k2)
    =t=0m1((t+1)k2tk2)i=0nik1[ai+bct+1]=\\sum\\limits_{t=0}^{m-1}((t+1)^{k_2}-t^{k_2})\\sum\\limits_{i=0}^ni^{k_1}[\\lfloor\\dfrac{ai+b}{c}\\rfloor\\geq t+1]=t=0m1((t+1)k2tk2)i=0nik1[cai+bt+1]
    =t=0m1((t+1)k2tk2)i=0nik1[i&gt;tc+cb1a]=\\sum\\limits_{t=0}^{m-1}((t+1)^{k_2}-t^{k_2})\\sum\\limits_{i=0}^ni^{k_1}[i&gt; \\lfloor\\dfrac{tc+c-b-1}{a}\\rfloor]=t=0m1((t+1)k2

收藏 打印
您的足迹: