类欧几里得算法

Posted pedesis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类欧几里得算法相关的知识,希望对你有一定的参考价值。

  对于求和式 $f(a,b,c,n)=\sum_i=0^n \lfloor \fracai+bc \rfloor$

  当 $a \geq c$ 或 $b \geq c$ 时,设 $a‘=a \; mod \; c$,$b‘=b \; mod \; c$,有

$$\beginalign* f(a,b,c,n) = & \sum_i=0^n \; \lfloor \fracai+bc \rfloor \\ = & \sum_i=0^n \; \lfloor \fraca‘i+b‘c \rfloor + \lfloor \fracac \rfloor \times i + \lfloor \fracbc \rfloor \\ = & \; f(a‘,b‘,c,n) + \fracn(n+1)2 \times \lfloor \fracac \rfloor + (n+1) \times \lfloor \fracbc \rfloor \endalign*$$

  当 $a<c$ 且 $b<c$ 时,设 $m= \lfloor \fracan+bc \rfloor$,有

$$\beginalign* f(a,b,c,n) = & \sum_i=0^n \; \lfloor \fracai+bc \rfloor \\ = & \sum_j=1^m \sum_i=0^n \; [ \lfloor \fracai+bc \rfloor \geq j ] \\ = & \sum_j=0^m-1 \sum_i=0^n \; [ \lfloor \fracai+bc \rfloor \geq j+1 ] \\ = & \sum_j=0^m-1 \sum_i=0^n \; [ ai \geq jc+c-b ] \\ = & \sum_j=0^m-1 \sum_i=0^n \; [ ai > jc+c-b-1 ] \\ = & \sum_j=0^m-1 \sum_i=0^n \; [ i > \lfloor \fracjc+c-b-1a \rfloor ] \\ = & \sum_j=0^m-1 n- \lfloor \fracjc+c-b-1a \rfloor \\ = & \; nm - \sum_j=0^m-1 \; \lfloor \fracjc+c-b-1a \rfloor \\ = & \; nm-f(c,c-b-1,a,m-1) \endalign*$$

  这与欧几里得算法通过取模缩小范围的思想相似,时间复杂度为 $O(log \; a)$

技术图片
ll f(ll a, ll b, ll c, ll n) 
    if (!a) return b / c * (n + 1);
    if (a < c && b < c) 
        ll m = (a * n + b) / c;
        if (!m) return 0;
        return n * m - f(c, c - b - 1, a, m - 1);
    
    if (n & 1)
    return f(a % c, b % c, c, n) + (n + 1) / 2 * n * (a / c) + (n + 1) * (b / c);
    return f(a % c, b % c, c, n) + n / 2 * (n + 1) * (a / c) + (n + 1) * (b / c);
View Code

以上是关于类欧几里得算法的主要内容,如果未能解决你的问题,请参考以下文章

[P5170] 类欧几里得算法

类欧几里得算法与推导

类欧几里得算法

类欧几里得算法浅谈(部分)

类欧几里得算法

模板 - 类欧几里得算法