类欧几里得算法总结

复习的时候发现已经忘得差不多了。。。

一些等式

abcacbabcacba<bcac<ba>bcac>b(4) (4) a ≤ ⌊ b c ⌋ ⇔ a c ≤ b a ≥ ⌈ b c ⌉ ⇔ a c ≥ b a < ⌈ b c ⌉ ⇔ a c < b a > ⌊ b c ⌋ ⇔ a c > b

记住有等号则符号和大小与号一致,否则相反即可。

bc=bc+1cbc=b+c1c(5) (5) ⌊ b c ⌋ = ⌈ b − c + 1 c ⌉ ⌈ b c ⌉ = ⌊ b + c − 1 c ⌋

可以和上面几个等价关系一起用。

类欧几里得

i=0nai+bc=======i=0nj=0ai+bc11j=0an+bc1i=0n[j<ai+bc]j=0an+bc1i=0n[j<ai+bc+1c]j=0an+bc1i=0n[cj<ai+bc+1]j=0an+bc1i=0n[i>cj+cb1a]j=0an+bc1[ncj+cb1a]nan+bcj=0an+bc1[cj+cb1a](6) (6) ∑ i = 0 n ⌊ a i + b c ⌋ = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 1 = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ j < ⌊ a i + b c ⌋ ] = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ j < ⌈ a i + b − c + 1 c ⌉ ] = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ c j < a i + b − c + 1 ] = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ i > ⌊ c j + c − b − 1 a ⌋ ] = ∑ j = 0 ⌊ a n + b c ⌋ − 1 [ n − ⌊ c j + c − b − 1 a ⌋ ] = n ∗ ⌊ a n + b c ⌋ − ∑ j = 0 ⌊ a n + b c ⌋ − 1 [ ⌊ c j + c − b − 1 a ⌋ ]

递归下去即可。

扩展类欧几里得

其实欧几里得还有几类扩展,因为运用不多,所以我没学,具体可以看:传送门

实数类欧几里得

BZOJ3817

大概是给你一条从原点出发直线(斜率为 r r )的直线下方整点的个数。迭代方法类似,不过斜率要单独记录。具体可以看:传送门

注意这种方法只对于直线没有经过整点的方法适用。经过整点可能需要一点讨论。

你可能感兴趣的:(类欧几里得)