首页 > 其他 > 详细

扩展欧几里得

时间:2019-11-01 16:46:09      阅读:97      评论:0      收藏:0      [点我收藏+]

要求这么一类问题

\[ \begin{aligned} f(a,b,c,n) &=\sum_{i=0}^n \left\lfloor{ai+b\over c}\right\rfloor \end{aligned} \]

开始颓柿子

  • \(Case 1:a=0\)

\[ \begin{aligned} f(a,b,c,n) &=(n+1)\left\lfloor{b\over c}\right\rfloor\\end{aligned} \]

  • \(Case 2:a\geq c\)\(b\geq c\)

\[ \begin{aligned} f(a,b,c,n) &=\sum_{i=0}^n \left\lfloor{ai+b\over c}\right\rfloor\&=\sum_{i=0}^n \left\lfloor{(a\bmod c)i+(b\bmod c)\over c}\right\rfloor+{n(n+1)\over 2}\left\lfloor{a\over c}\right\rfloor+(n+1)\left\lfloor{b\over c}\right\rfloor\&=f(a\bmod c,b\bmod c,n)+{n(n+1)\over 2}\left\lfloor{a\over c}\right\rfloor+(n+1)\left\lfloor{b\over c}\right\rfloor\\end{aligned} \]

  • \(Case 3:Otherwise\)

\(m=\left\lfloor{an+b\over c}\right\rfloor\),显然有\(m\leq n\)

\[ \begin{aligned} f(a,b,c,n) &=\sum_{i=0}^n \left\lfloor{ai+b\over c}\right\rfloor\&=\sum_{i=0}^n \sum_{j=1}^m\left[\left\lfloor{ai+b\over c}\right\rfloor\geq j\right]\&=\sum_{i=0}^n \sum_{j=0}^{m-1}\left[\left\lfloor{ai+b\over c}\right\rfloor\geq j+1\right]\&=\sum_{i=0}^n \sum_{j=0}^{m-1}\left[ai>cj+c-b-1\right]\&=\sum_{i=0}^n \sum_{j=0}^{m-1}\left[i>\left\lfloor{cj+c-b-1\over a}\right\rfloor\right]\&=\sum_{j=0}^{m-1}n-\left\lfloor{cj+c-b-1\over a}\right\rfloor\&=nm-f(c,c-b-1,a,m-1)\\end{aligned} \]

发现这个过程中\(a,c\)的迭代类似\(gcd\),所以这个算法的复杂度也是\(O(\log n)\)

另外的两个扩展不学了……

扩展欧几里得

原文:https://www.cnblogs.com/yuanquming/p/11777184.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!