首页 > 编程语言 >类欧几里得算法

类欧几里得算法

时间:2024-02-23 12:11:26浏览次数:27  
标签:lfloor right frac 欧几里得 rfloor 算法 sum left

要求类似于这样的东西:

\[\begin{align*} f(n,a,b,c)&=\sum\limits_{i=0}^n {\left\lfloor \frac{ai+b}{c} \right\rfloor} \\ g(n,a,b,c)&= \sum\limits_{i=0}^n {\left\lfloor \frac{ai+b}{c} \right\rfloor}^2 \\ h(n,a,b,c)&= \sum\limits_{i=0}^n {i\left\lfloor \frac{ai+b}{c} \right\rfloor} \\ &\text{等等} \end{align*} \]

有一些关于取整不等式的前置知识:

\[(a\in\mathbb{Z},b\in\mathbb{R})\ \ a<\left\lfloor b \right\rfloor \Leftrightarrow a+1 \le\left\lfloor b \right\rfloor \Leftrightarrow a+1 \le b \]

\[(a\in\mathbb{R},b\in\mathbb{Z})\ \ \left\lfloor a \right\rfloor < b \Leftrightarrow a < b \]

\[(a\in\mathbb{Z},b\in\mathbb{Z})\ \ a \le b \Leftrightarrow a<b+1 \Leftrightarrow a-1<b \]

\[(a \in \mathbb{R},b \in \mathbb{Z})\left\lfloor a \right\rfloor=b+\left\lfloor a-b \right\rfloor \]

然后分析问题。

\[\sum\limits_{i=0}^{n}\left\lfloor \frac{ai+b}{c} \right\rfloor = \sum\limits_{i=0}^{n} \left\lfloor \left\lfloor \frac{a}{c} \right \rfloor i+ \left\lfloor \frac{b}{c} \right \rfloor + \frac{(a \bmod c)i+b \bmod c}{c} \right\rfloor= \frac{n(n+1)}{2} \left\lfloor \frac{a}{c} \right\rfloor + n \left\lfloor \frac{b}{c} \right\rfloor + \sum\limits_{i=0}^{n} \left\lfloor \frac{(a \bmod c)i+b \bmod c}{c} \right\rfloor\]

我们仍然设结果为 \(f(n,a,b,c)\),但此时 \(a,b<c\)。
并且,此时我们设 \(m_i=\left\lfloor \frac{ai+b}{c} \right\rfloor\)
于是

\[\sum\limits_{i=0}^n m_i = \sum\limits_{i=0}^{n} \sum\limits_{j=0}^{m_i-1} 1 = \sum\limits_{j=0}^{m_n-1} \sum\limits_{i=0}^{n} [j<m_i] \]

使用引理,

\[j < m_i \Leftrightarrow j+1 \le \frac{ai+b}{c} \Leftrightarrow \frac{jc+c-b-1}{a} < i \]

于是

\[f(n,a,b,c)=\sum\limits_{j=0}^{m_n-1}(n-\left\lfloor \frac{jc+c+b-1}{a} \right\rfloor)=nm-f(m_n-1,c,c-b-1,a) \]

边界为 \(m_n=0\)
类似于欧几里得算法(辗转相除),时间复杂度 \(O(\log n)\)

标签:lfloor,right,frac,欧几里得,rfloor,算法,sum,left
From: https://www.cnblogs.com/hbhz-zcy/p/18029073

相关文章

  • day41 动态规划part3 代码随想录算法训练营 96. 不同的二叉搜索树
    题目:96.不同的二叉搜索树我的感悟:这题,考的概率不大,听一遍,过一遍就行。理解难点:二叉搜索树定义为什么是累加的听课笔记:代码示例:classSolution:defnumTrees(self,n:int)->int:dp=[0]*(n+1)#创建一个长度为n+1的数组,初始化为0d......
  • day40 动态规划part3 代码随想录算法训练营 343. 整数拆分
    题目:343.整数拆分我的感悟:题目很难,但我动力十足!!理解难点:如何拆分为什么要保留dp[i]听课笔记:代码示例:classSolution:defintegerBreak(self,n:int)->int:#思路:#dp[i]是到目前为止能拆分取的最大值#dp[i]可以拆成j*(集合)......
  • 十大经典排序算法
    十大经典排序算法.md0、算法概述0.1算法分类****十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间......
  • 文心一言 VS 讯飞星火 VS chatgpt (200)-- 算法导论15.2 4题
    四、用go语言,对输入链长度为n的矩阵链乘法问题,描述其子问题图:它包含多少个顶点?包含多少条边?这些边分别连接哪些顶点?文心一言:矩阵链乘法问题是一个经典的动态规划问题,其中给定一个矩阵链,我们需要确定一个乘法顺序,使得计算该链所需的总标量乘法次数最少。子问题图(也叫DAG,有......
  • Python数据结构与算法05——快速排序
    快速排序:递归defquick_sort(aimlist,first,last):#打印当前排序状态print(aimlist)#如果子列表只有一个元素或没有元素,直接返回iffirst>=last:return#初始化低位、高位和中间值low=firstheigh=lastmid=aimli......
  • 文心一言 VS 讯飞星火 VS chatgpt (199)-- 算法导论15.2 1题
    一、用go语言,对矩阵规模序列(5,10,3,12,5,50,6),求矩阵链最优括号化方案。文心一言,代码正常运行:在Go语言中,为了找到矩阵链乘法的最优括号化方案,我们通常会使用动态规划(DynamicProgramming,DP)的方法。矩阵链乘法的问题是要确定计算矩阵乘积的最有效顺序,以最小化乘法操作的次数。这里......
  • 代码随想录算法训练营day02 | leetcode 977. 有序数组的平方、35.搜索插入位置、34.在
    题目链接:977.有序数组的平方-简单题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]......
  • 莫队算法学习笔记
    普通莫队形式¶假设\(n=m\),那么对于序列上的区间询问问题,如果从\([l,r]\)的答案能够\(O(1)\)扩展到\([l-1,r]\)\([l+1,r]\)\([l,r-1]\)\([l,r+1]\)(即与\([l,r]\)相邻的区间)的答案,那么可以在\(O(n\sqrt{n})\)的复杂度内求出所有询问的答案。实现¶离线后排序,顺序处理......
  • 代码随想录算法训练营第二十五天| 216.组合总和III 17.电话号码的字母组合
    组合总和III题目链接:216.组合总和III-力扣(LeetCode)思路:仿照昨天的递归模板写的,同样是for循环横向遍历,递归纵向遍历。注意当k>n时要直接跳出,否则会判断栈溢出。额外发现一个问题就是在累加sum时,用for(autoi:path)sum+=path[i];会出现奇怪数字,原因是auto遍历用法错误,正确写......
  • DFS算法模板(2488:A Knight's Journey)
    DFS算法(C++版本)题目一:链接:http://bailian.openjudge.cn/practice/2488/解析思路:骑士找路就是基本的DFS,用递归不断找到合适的路,找不到就回头直到找到合适的路。该题难点:要是实现字典序,也就是同样的两种选择,要走到A1而不是B1。所以就有了{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1......