• 类欧几里得算法


    类欧几里得算法

    基础

    [f(a,b,c,n)=sum_{i=0}^n leftlfloor dfrac{ai+b}{c} ight floor ]

    (age c)(bge c)

    [egin{aligned} f(a,b,c,n)&=sum_{i=0}^n leftlfloor dfrac{ai+b}{c} ight floor\ &=sum_{i=0}^n leftlfloor dfrac{cleftlfloorfrac{a}{c} ight floor i+amod c imes i+cleftlfloorfrac{b}{c} ight floor+bmod c}{c} ight floor\ &=sum_{i=0}^nleftlfloordfrac{a}{c} ight floor i+leftlfloorfrac{b}{c} ight floor+leftlfloor dfrac{amod c imes i+bmod c}{c} ight floor\ &=leftlfloordfrac{a}{c} ight floordfrac{n(n+1)}{2}+leftlfloordfrac{b}{c} ight floor(n+1)+f(amod c,bmod c,c,n) end{aligned} ]

    (a<c)(b<c)

    (leftlfloor dfrac{ai+b}{c} ight floor)替换为(sumlimits_{j=0}left[ j<leftlfloor dfrac{ai+b}{c} ight floor ight]),其中(j)的上界为(leftlfloor dfrac{an+b}{c} ight floor-1)。也就是求

    [f(a,b,c,n)=sum_{i=0}^nsum_{j=0}left[j<leftlfloor dfrac{ai+b}{c} ight floor ight] ]

    交换求和号

    [f(a,b,c,d)=sum_{j=0}^{lfloorfrac{an+b}{c} floor-1}sum_{i=0}^nleft[j<leftlfloordfrac{ai+b}{c} ight floor ight]\ ]

    乱搞一下后面那个东西,通过下取整与不等号的变换把(i)搞掉

    [j<leftlfloordfrac{ai+b}{c} ight floor Leftrightarrow j+1le leftlfloordfrac{ai+b}{c} ight floorLeftrightarrow j+1le dfrac{ai+b}{c}\ Leftrightarrow dfrac{cj+c-b}{a}le i Leftrightarrow ige dfrac{cj+c-b}{a}Leftrightarrow i>leftlfloordfrac{cj+c-b-1}{a} ight floor ]

    (i)的上界是确定的,为(n),也就是说(j<leftlfloordfrac{ai+b}{c} ight floor)(i)的个数等于(n-leftlfloordfrac{cj+c-b-1}{a} ight floor)

    [egin{aligned} f(a,b,c,d)&=sum_{j=0}^{lfloor frac{an+b }{c} floor-1}sum_{i=0}^nleft[j<leftlfloordfrac{ai+b}{c} ight floor ight]\ &=sum_{j=0}^{lfloor frac{an+b }{c} floor-1}n-leftlfloordfrac{cj+c-b-1}{a} ight floor\ &= leftlfloordfrac{an+b}{c} ight floor n-sum_{j=0}^{lfloorfrac{an+b}{c} floor-1}leftlfloordfrac{cj+c-b-1}{a} ight floor\ &= leftlfloordfrac{an+b}{c} ight floor n-f(c,c-b-1,a,lfloorfrac{an+b}{c} floor -1) end{aligned} ]

    以后方便起见记(leftlfloordfrac{an+b}{c} ight floor=m),记(leftlfloordfrac{cj+c-b-1}{a} ight floor=t),即

    [f(a,b,c,n)=mn-f(c,c-b-1,a,m-1) ]

    递归求解即可,边界为(a=0)

    复杂度(O(log n)),证明类似欧几里得算法,故算法得名

    扩展

    [g(a,b,c,n)=sum_{i=0}^n ileftlfloor dfrac{ai+b}{c} ight floor\ h(a,b,c,n)=sum_{i=0}^n leftlfloor dfrac{ai+b}{c} ight floor^2 ]

    (g(a,b,c,n))

    (age c)(bge c)

    [egin{aligned} g(a,b,c,n)&=sum_{i=0}^n ileftlfloor dfrac{ai+b}{c} ight floor\ &=sum_{i=0}^n ileftlfloor dfrac{cleftlfloorfrac{a}{c} ight floor i+amod c imes i+cleftlfloorfrac{b}{c} ight floor+bmod c}{c} ight floor\ &=sum_{i=0}^nleftlfloordfrac{a}{c} ight floor i^2+leftlfloorfrac{b}{c} ight floor i+leftlfloor dfrac{amod c imes i+bmod c}{c} ight floor i\ &=leftlfloordfrac{a}{c} ight floordfrac{n(n+1)(2n+1)}{6}+leftlfloordfrac{b}{c} ight floordfrac{n(n+1)}{2}+g(a\% c,b\% c,c,n) end{aligned} ]

    (a<c)(b<c)

    (m=leftlfloordfrac{an+b}{c} ight floor)(t=leftlfloordfrac{cj+c-b-1}{a} ight floor)

    [egin{aligned} g(a,b,c,n)&=sum_{i=0}^nisum_{j=0}left[j<leftlfloor dfrac{ai+b}{c} ight floor ight]\ &=sum_{j=0}^{m-1}sum_{i=0}^nileft [j<leftlfloordfrac{ai+b}{c} ight floor ight]\ &=sum_{j=0}^{m-1}sum_{i=0}^ni [i>t]\ &=sum_{j=0}^{m-1}frac{n(n+1)}{2}-frac{t(t+1)}{2}\ &=dfrac{1}{2}[mn(n+1)-sum_{j=0}^{m-1}t^2-sum_{j=0}^{m-1}t ]\ &=dfrac{1}{2}[mn(n+1)-h(c,c-b-1,a,m-1)-f(c,c-b-1,a,m-1) ] end{aligned} ]

    递归边界:(a=0)

    (h(a,b,c,n))

    (age c)(bge c)

    [egin{aligned} h(a,b,c,n)&=sum_{i=0}^n leftlfloor dfrac{ai+b}{c} ight floor^2\ &=sum_{i=0}^nleft(leftlfloordfrac{a}{c} ight floor i+leftlfloorfrac{b}{c} ight floor +leftlfloor dfrac{amod c imes i+bmod c}{c} ight floor ight)^2 \ &=sum_{i=0}^nleftlfloordfrac{a}{c} ight floor^2 i^2+leftlfloorfrac{b}{c} ight floor^2 +leftlfloor dfrac{a \% c imes i+b\% c}{c} ight floor^2+2leftlfloordfrac{a}{c} ight floorleftlfloorfrac{b}{c} ight floor i\& +2leftlfloordfrac{a}{c} ight floorleftlfloor dfrac{a\% c imes i+b\% c}{c} ight floor i+2leftlfloordfrac{b}{c} ight floorleftlfloor dfrac{a\% c imes i+b\% c}{c} ight floor\ &=frac{n(n+1)(2n+1)}{6}leftlfloordfrac{a}{c} ight floor^2+(n+1)leftlfloorfrac{b}{c} ight floor^2+n(n+1)leftlfloordfrac{a}{c} ight floorleftlfloorfrac{b}{c} ight floor+2leftlfloordfrac{a}{c} ight floor g(a\% c,b\%c,c,n)\ & +2leftlfloordfrac{b}{c} ight floor f(a\%c,b\%c,c,n)+h(a\%c,b\%c,c,n) end{aligned} ]

    (a<c)(b<c)

    (m=leftlfloordfrac{an+b}{c} ight floor)(t=leftlfloordfrac{cj+c-b-1}{a} ight floor)

    [h(a,b,c,n)=sum_{i=0}^n leftlfloor dfrac{ai+b}{c} ight floor^2 ]

    (n^2)写成(left(2sumlimits_{i=1}^n i ight)-n)

    [egin{aligned} h(a,b,c,n)&=sum_{i=0}^nleft(2sum_{j=1}^{leftlfloor frac{ai+b}{c} ight floor}j ight)-leftlfloor dfrac{ai+b}{c} ight floor\ &=left(2sum_{i=0}^nsum_{j=0}^{leftlfloor frac{ai+b}{c} ight floor-1}j+1 ight)-f(a,b,c,n)\ &=left(2sum_{j=0}^{m-1}sum_{i=0}^n (j+1)left[j< leftlfloor frac{ai+b}{c} ight floor ight] ight)-f(a,b,c,n) end{aligned} ]

    其中

    [egin{aligned} sum_{j=0}^{m-1}sum_{i=0}^n (j+1)left[j< leftlfloor frac{ai+b}{c} ight floor ight]&=sum_{j=1}^{m-1}(j+1)sum_{i=0}^n left[j< leftlfloor frac{ai+b}{c} ight floor ight]\ &=sum_{j=0}^{m-1}(j+1)sum_{i=0}^n[i>t]\ &=sum_{j=0}^{m-1}(j+1)(n-t)\ &=dfrac{m(m+1)}{2}n-f(c,c-b-1,a,m-1) -g(c,c-b-1,a,m-1) end{aligned} ]

    所以

    [egin{aligned} h(a,b,c,n)&=m(m+1)n-2f(c,c-b-1,a,m-1)-2g(c,c-b-1,a,m-1)-f(a,b,c,n) end{aligned} ]

    递归边界:(a=0)

    实现注意事项

    因为(g,h)有相互调用,递归时把一组((a,b,c,n))(f,g,h)都求出来

  • 相关阅读:
    NeoFinder for Mac(增强型文件管理工具)破解版安装
    Monodraw for Mac(基于 ASCII 码设计编辑工具)破解版安装
    SNF开发平台WinForm-审核流使用方法样例
    SNF快速开发平台MVC-Grid++集成打印
    SNF快速开发平台MVC-富文本控件集成了百度开源项目editor
    C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
    SNF快速开发平台MVC-EasyUI3.9之-WebApi和MVC-controller层接收的json字符串的取值方法和调用后台服务方法
    SNF快速开发平台--规则引擎在程序当中如何调用
    SNF快速开发平台--规则引擎介绍和使用文档
    SNF快速开发平台MVC-EasyUI3.9之-DataGrid表格控件如何增加右键菜单
  • 原文地址:https://www.cnblogs.com/harryzhr/p/14757802.html
Copyright © 2020-2023  润新知