【类欧几里得学习小记】

类欧几里得算法因为形式上像欧几里得算法而得名,其时间复杂度也和欧几里得算法一致,类欧几里得算法有很多应用,下面只举部分例子。

目标

求出以下三个函数值

f(a,b,c,n)=ni=0ai+bc

g(a,b,c,n)=ni=0iai+bc

h(a,b,c,n)=ni=0ai+bc2

m=an+bc

f

当a==0时

f(a,b,c,n)=ni=0ai+bc

=bc(n+1)

当(a>=c)||(b>=c)时

f(a,b,c,n)=ni=0ai+bc

=ni=0(aci+bc+(a%c)i+b%cc)

=acn(n+1)/2+bc(n+1)+f(a%c,b%c,c,n)

(a<c)and(b<c)

f(a,b,c,n)=ni=0ai+bc

=ni=0mj=1[ai+bc>=j]

=ni=0m1j=0[ai+bc>=j+1]

=ni=0m1j=0[ai+b>=cj+c]

=ni=0m1j=0[ai+b>cj+c1]

=ni=0m1j=0[i>cj+cb1a]

=m1j=0ni=0[i>cj+cb1a]

=m1j=0(ncj+cb1a)

=nmm1j=0cj+cb1a

=nmf(c,cb1,a,m1)

g

当a==0时

g(a,b,c,n)=ni=0iai+bc

=bcn(n+1)/2

当(a>=c)||(b>=c)时

g(a,b,c,n)=ni=0iai+bc

=ni=0i(aci+bc+(a%c)i+b%cc)

=acn(n+1)(2n+1)/6+bcn(n+1)/2+g(a%c,b%c,c,n)

(a<c)and(b<c)

g(a,b,c,n)=ni=0iai+bc

=m1j=0ni=0i[i>cj+cb1a]

=m1j=0(n+cj+cb1a1)(ncj+cb1a)/2

=12mn(n+1)12f(c,cb1,a,m1)12h(c,cb1,a,m1)

h

当a==0时

h(a,b,c,n)=ni=0ai+bc2

=(bc)2(n+1)

当(a>=c)||(b>=c)时

h(a,b,c,n)=ni=0ai+bc2

x2=2x(x+1)2x

=2xi=1ix

h(a,b,c,n)=ni=0ai+bc2

=2ni=0ai+bcj=1jf(a,b,c,n)

=2mi=1inj=0[aj+bc>=i]f(a,b,c,n)

=2m1i=0(i+1)nj=0[j>ci+cb1a]f(a,b,c,n)

=nm(m+1)2f(c,cb1,a,m1)2g(c,cb1,a,m1)f(a,b,c,n)

至此我们已经可以解决这一类类欧几里得问题。

你可能感兴趣的:(学习小记,数论)