zoukankan      html  css  js  c++  java
  • [学习笔记]类欧几里得

    类欧几里得旨在处理一类问题:
    即和直线下整数点有关问题。
    \(f(a,b,c,n) = \sum_{i = 0}^n\lfloor\frac{ai + b}{c}\rfloor\)

    我们先考虑\(a > c,b > c\)我们先对其进行取膜

    \(f(a,b,c,n) \\= \sum_{i = 0}^n\lfloor\frac{ai + b}{c}\rfloor\\=\sum\lfloor\frac{(\lfloor{\frac{a}{c}}\rfloor * c + a\ mod\ c) \times i + (\lfloor{\frac{b}{c}}\rfloor * c + b\ mod\ c)}{c}\rfloor\\=\frac{n(n + 1)}{2}\lfloor\frac{a}{c}\rfloor + (n + 1)\lfloor\frac{b}{c}\rfloor + f(a\ mod\ c,b\ mod\ c,c,n)\)

    考虑转化贡献:

    \(= \sum_{j = 0}^{\lfloor\frac{an + b}{c}\rfloor - 1}\sum_{i = 0}^n [j < \lfloor\frac{ai + b}{c}\rfloor]\)

    接下来是最关键的一步,我们转换条件
    \(\lfloor\frac{ai + b}{c}\rfloor \to j + 1\leq \frac{ai + b}{c}\)

    在做变换有
    \(\lfloor\frac{ai + b}{c}\rfloor \to j + 1\leq \frac{ai + b}{c}\to jc + c \leq ai + b \to jc + c - b - 1 < ai\)

    所以有\(\lfloor\frac{jc + c - b - 1} {a}\rfloor < i\)
    \(m = \lfloor\frac{an + b}{c}\rfloor\)
    所以改柿子为\(f(a,b,c,n) = \sum_{j = 0}^{m - 1}\sum_{i = 0}^n[i > \lfloor\frac{jc + c - b - 1} {a}\rfloor]\)

    所以有\(= \sum_{j = 0}^{m - 1}(n - \lfloor\frac{jc + c - b - 1}{a}\rfloor) = nm - f(c,c - b - 1,a,m - 1)\)

    于是我们发现其变成了一个辗转相乘的的形式,有类似于欧几里得。其为\(O(logn)\)

    我们还可以思考下列两个变种式,但是由于我太懒了,不太想打\(LaTex\),我找时间把我手写的拍上来。

    \(g(a,b,c,n) = \sum_{i = 0}^n i \lfloor\frac{ai + b}{c}\rfloor\)

    \(h(a,b,c,n) = \sum_{i = 0}^n ( \lfloor\frac{ai + b}{c}\rfloor) ^ 2\)

    因为万欧比较好写,所以可能不会实现该类欧做法,下次遇到万欧不能做的再放题上来吧。

  • 相关阅读:
    axios的使用/
    jQuery好玩的双向控制轮播
    vue的路由跳转方式/两种
    vfor的某些注意事项
    vue使用插件时不能撑满页面?
    swiper中的双向控制器不生效问题
    sass的安装及使用
    .net必懂题
    软件架构初读01
    EJB
  • 原文地址:https://www.cnblogs.com/dixiao/p/15719048.html
Copyright © 2011-2022 走看看