类欧几里得算法

类欧几里得算法

定义

f(a,b,c,n)=i=0nai+bcg(a,b,c,n)=i=0nai+bc2h(a,b,c,n)=i=0niai+bc

给定 n,a,b,c,求 f(a,b,c,n),g(a,b,c,n),h(a,b,c,n),对 998244353 取模(1T105,0n,a,b,c109,c0)。

考虑函数 f。首先考虑 a>cb>c 的情况

f(a,b,c,n)=i=0nai+bc=i=0n(acc+amodc)i+bcc+bmodcc=i=0n(aci+bc+(amodc)i+(bmodc)c)=n(n+1)2ac+(n+1)bc+i=0namodci+bmodcc=n(n+1)2ac+(n+1)bc+f(amodc,bmodc,c,n)

接下来考虑 acbc 的情况

f(a,b,c,n)=i=0nai+bc=i=0nj=0ai+bc11=ji=0n[j<ai+bc]=j=0an+bc1i=0n[j<ai+bc]

考虑限制条件 j<ai+bc

j<ai+bcj<ai+bcj+1ai+bcjc+cai+bjc+cbaijc+cb1<aijc+cb1a<ijc+cb1a<i

m=an+bc,t=jc+cb1a,则

f(a,b,c,n)=j=0an+bc1i=0n[j<ai+bc]=j=0m1i=0n[i>t]=j=0m1(nt)=nmj=0m1jc+cb1a=nmf(c,cb1,a,m1)

观察到当 a>c 时,aamodc;当 ac 时,a,c 互换位置,故复杂度为 O(logmax(a,c))


考虑函数 g。首先考虑 a>cb>c 的情况

g(a,b,c,n)=i=0nai+bc2=i=0n(acc+amodc)i+bcc+bmodcc2=i=0n(aci+bc+(amodc)i+(bmodc)c)2=n(n+1)(2n+1)6ac2+n(n+1)2bc2+g(amodc,bmodc,c,n)+n(n+1)2acbc+2ach(amodc,bmodc,c,n)+2bcf(amodc,bmodc,c,n)

接下来考虑 acbc 的情况,观察到

n2=2n(n+1)2n=2(i=1ni)n

那么

g(a,b,c,n)=i=0nai+bc2=i=0n[2(j=1ai+bcj)ai+bc]

考虑处理 i=0nj=1ai+bcj,记 m=an+bc,t=jc+cb1a

i=0nj=1ai+bcj=i=0nj=0ai+bc1(j+1)=j=0m1(j+1)i=0n[i>t]=j=0m1(j+1)(nt)=12nm(m+1)+h(c,cb1,a,m1)f(c,cb1,a,m1)

那么

g(a,b,c,n)=i=0n[2(j=1ai+bcj)ai+bc]=nm(m+1)+2h(c,cb1,a,m1)2f(c,cb1,a,m1)+f(a,b,c,n)


考虑函数 h。首先考虑 a>cb>c 的情况

h(a,b,c,n)=i=0niai+bc=i=0ni(acc+amodc)i+bcc+bmodcc=i=0ni(aci+bc+(amodc)i+(bmodc)c)=n(n+1)(2n+1)6ac+n(n+1)2bc+i=0niamodci+bmodcc=n(n+1)(2n+1)6ac+n(n+1)2bc+h(amodc,bmodc,c,n)

接下来考虑 acbc 的情况,记 m=an+bc,t=jc+cb1a

h(a,b,c,n)=i=0niai+bc=j=0m1i=0n[i>t]i=j=0m1(n+t+1)(nt)2=12[mn(n+1)i=0nt2i=0nt]=12[mn(n+1)g(c,cb1,a,m1)f(c,cb1,a,m1)]

posted @   User-Unauthorized  阅读(22)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示