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\)

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

  • 相关阅读:
    网络编程学习笔记(二)基于TCP的Socket编程
    网络编程学习笔记(一)网络基础知识
    Java IO学习笔记(五)对象流
    Java IO学习笔记(四)打印流
    Java IO学习笔记(三)转换流、数据流、字节数组流
    Java IO学习笔记(二)缓冲流
    Java IO学习笔记(一)
    服务提供者框架
    超简单——自己搭建ftp服务器
    简单的排序算法实现
  • 原文地址:https://www.cnblogs.com/dixiao/p/15719048.html
Copyright © 2011-2022 走看看