类欧几里得算法

要求类似于这样的东西:

f(n,a,b,c)=i=0nai+bcg(n,a,b,c)=i=0niai+bch(n,a,b,c)=i=0nai+bc2等等

有一些关于取整不等式的前置知识:

(aZ,bR)  a<ba+1ba+1b

(aR,bZ)  a<ba<b

(aZ,bZ)  aba<b+1a1<b

(aR,bZ)a=b+ab

然后分析问题。

i=0nai+bc=i=0naci+bc+(amodc)i+bmodcc=n(n+1)2ac+nbc+i=0n(amodc)i+bmodcc

我们仍然设结果为 f(n,a,b,c),但此时 a,b<c
并且,此时我们设 mi=ai+bc,特别的 m=mn
于是

i=0nmi=i=0nj=0mi11=j=0m1i=0n[j<mi]

使用引理,

j<mij+1ai+bcjc+cb1a<i

于是

f(n,a,b,c)=j=0m1(njc+c+b1a)=nmf(m1,c,cb1,a)

边界为 m=0
类似于欧几里得算法(辗转相除),时间复杂度 O(logn)

同理考虑 g(n,a,b,c):

g(n,a,b,c)=acn(n+1)(2n+1)6+bcn(n+1)2+i=0ni(amodc)i+bmodcc

新的 g(n,a,b,c),有 a,b<c
tj=jc+cb1a

g(n,a,b,c)=j=0m1i=0ni[i>tj]=j=0m1(nt)(n+t+1)2=12(mn(n+1)j=0m1tj=0m1t2)=12(mn(n+1)f(m1,c,cb1,a)h(m1,c,cb1,a))

于是我们考虑

h(n,a,b,c)=ac2n(n+1)(2n+1)6+bc2(n+1)+acbcn(n+1)+h(n,amodc,bmodc,c)+2bcf(n,amodc,bmodc,c)+2acg(n,amodc,bmodc,c)

于是我们让 a,b<c

h(n,a,b,c)=j=0m1k=0m1i=0n[j<mi][k<mi]=2j=0m1k=0ji=0n[j<mi][k<mi]j=0m1i=0n[j<mi]=2j=0m1(j+1)i=0n[i>tj]f(n,a,b,c)=nm(m1)2g(m1,c,cb1,a)+f(n,a,b,c)

容易发现可以把这三个递归合并,从而保证了正常的时间复杂度。

posted @   hbhz_zcy  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示