类欧几里得算法
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);
以上是关于类欧几里得算法的主要内容,如果未能解决你的问题,请参考以下文章