首页 > 其他分享 >『学习笔记』欧拉函数、莫比乌斯函数、高位前缀和、狄利克雷前后缀和

『学习笔记』欧拉函数、莫比乌斯函数、高位前缀和、狄利克雷前后缀和

时间:2023-08-15 09:14:35浏览次数:35  
标签:函数 limits 狄利克 dfrac sum times alpha 雷前 前缀

欧拉函数

定义

又叫做 \(\varphi\) 函数,\(\varphi(x)\) 用来描述不大于 \(x\) 且与 \(x\) 互素的数的个数。

性质

  • 满足一切积性函数的性质。

    • 若 \(a \bot b\),则 \(f(a\times b) = f(a) \times f(b)\).

    • 能用线性筛埃氏筛求出。

  • \(\text{from}\ 1\ \text{to}\ n\) 中与 \(x\) 互素的数的和为 \(\dfrac{n \times \varphi(x)}{2}\).

  • 算数基本定理(唯一分解定理):\(N = \prod \limits _ {i = 1} ^ {k} p_i ^ {\alpha _ i}\). 其中 \(p_i\) 为素数,\(\alpha _ i\) 为素数 \(p_i\) 的个数,\(k\) 为互不相同的素数的个数。
    可以得到欧拉函数的计算公式:\(\varphi(N) = N \times \prod \limits _ {i = 1} ^ {k} \dfrac{p_i - 1}{p_i}\).
    证明:设 \(N\) 的其中两个因子 \(p_1,p_2\),\(\text{from}\ 1\ \text{to}\ n\) 中 \(p_1,p_2\) 的倍数的个数分别是 \(\dfrac{N}{p_1}, \dfrac{N}{p_2}\),但是有计算重复的,\(p_1 \times p_2\) 的倍数会被计算两次,所以要减去 \(\dfrac{N}{p_1 \times p_2}\). 所以 \(p_1,p_2\) 能为 \(\varphi(N)\) 贡献的答案就是 \(N - \dfrac{N}{p_1} - \dfrac{N}{p_2} + \dfrac{N}{p_1 \times p_2}\). 即 \(N \times (1 - \dfrac{1}{p_1})\times (1 - \dfrac{1}{p_2})\).
    根据数学归纳法即可得到上述欧拉函数的计算公式。

  • \(\sum \limits _ {k \mid n} \varphi(k) = n\). 这也是狄利克雷前缀和式。

还有一些其他的性质,感觉用到的很少,就不写了。

莫比乌斯函数

不像是定义的定义

又叫做 \(\mu\) 函数。设 \(N = \prod \limits _ {i = 1} ^ {k} p_i ^ {\alpha _ i}\),则有:

\[\mu(N) = \begin{cases} 1 & N = 1 \\ (-1)^k & \forall \alpha_i = 1(不存在平方因子) \\ 0 & \exist \alpha_i > 1(存在平方因子) \end{cases}. \]

性质

  • 满足一切积性函数的性质。

    • 若 \(a \bot b\),则 \(f(a\times b) = f(a) \times f(b)\).

    • 能用线性筛埃氏筛求出。

  • \(\sum \limits _ {k \mid n} \mu(k) = [n = 1]\). 这也是狄利克雷前缀和式。

  • 素数的 \(\mu\) 函数的值都是 \(-1\)。(显然)

高维前缀和

显然用求一、二维前缀和的方法是不可以的。

设 \(sum_{i, j}\) 是在第 \(i\) 维,状态集合(不同于状压)为 \(j\) 的前缀和,那么就存在转移方程:

\[sum_{i, j} = sum{i - 1, j} + \sum sum_{i, state(|j| - 1)} \]

其中,\(state(|j| - 1)\) 表示状态集合大小比 \(j\) 的小 \(1\) 的所有可能状态之一。

某些情况,我们也可以通过改变枚举顺序来滚掉第一维。

狄利克雷前后缀和

它们都是给定一个 \(\{a_n\}\) 来求 \(\{b_n\}\),只不过是求的式子不同。

狄利克雷前缀和是:\(b_i = \sum \limits _ {j \mid i} ^ n a_j\).

狄利克雷后缀和是:\(b_i = \sum \limits _ {i \mid j} ^ n a_j\).

求后缀和的方法和求前缀和的完全相同,这里只给出求前缀和的方法。

狄利克雷前缀和本质上就是高维前缀和,维度就是筛出来的的素数的个数,状态就是素数的乘积。

设 \(i = \prod \limits ^ {s} p_c ^ {\alpha _ c}\),\(j = \prod \limits ^ {s} p_c ^ {\beta _ c}\),且 \(i\) 为 \(j\) 的一个「后继 \(1\)」状态。为了方便理解,我们把质因子出现的次数用行向量表示:\([\alpha_1, \alpha_2, \cdots, \alpha_s], [\beta_1, \beta_2, \cdots, \beta_s]\),那么一定只存在一个 \(\alpha_k = \beta_k + 1\),其它的 \(\alpha_{l \ne k} = \beta_{l \ne k}\)。也可以这么理解,对于行向量 \(\alpha\),我令 \(i \leftarrow i \times p_k\),那么就有 \(\alpha_k \leftarrow \alpha_k + 1\)。

所以可得狄利克雷前缀和转移方程:

\[sum_{i, j \times prime_i} \leftarrow sum_{i, j \times prime_i} + sum_{i, j}. \]

显然可以压掉一维变成:

\[sum_{j \times prime_i} \leftarrow sum_{j \times prime_i} + sum_{j}. \]

后缀和也同理。

标签:函数,limits,狄利克,dfrac,sum,times,alpha,雷前,前缀
From: https://www.cnblogs.com/Chronologika/p/17630379.html

相关文章

  • operator bool 函数
    title:"operatorbool函数"date:2023-08-14T16:05:25+08:00tags:["C++"]categories:[]draft:false参考文档user-definedconversionfunction-cppreference.comTheSafeBoolIdiom-知乎为什么operatorbool()需要用explicit修饰?c++-Whydoesdecl......
  • 利用钩子函数增强HTTP请求处理
    From: 原创测试玩家勇哥测试玩家勇哥2023-06-1619:24发表于广东在自动化接口测试中,我们经常需要发送HTTP请求来模拟用户的操作并验证接口的正确性。够灵活处理请求参数、添加认证信息以及处理依赖参数。这正是钩子函数的用武之地。下面勇哥将以一个实际的示例场景为例,详......
  • Go 语言递归函数
    递归,就是在运行的过程中调用自己。阶乘packagemainimport"fmt"funcFactorial(xint)(resultint){ifx==0{result=1}else{result=x*Factorial(x-1)}return}funcmain(){variint=15fmt.Printf("%d的阶乘是%d\n",i......
  • Hive SQL 的 ntile 分组切片函数
    HiveSQL的ntile函数用于将分组数据按照顺序切分成n组,并返回当前切片值。如果切片不均匀,默认增加第一个切片的分布。它把有序的数据集合「平均分配」到指定的数量(n)个桶中,将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。语法......
  • 经典面试题函数柯里化: add(1)(2)(3) = 6
    functioncurrying(){constargs=Array.prototype.slice.call(arguments);constinner=function(){args.push(...arguments);returninner;};inner.__proto__[Symbol.toPrimitive]=inner.toString=inner.getValue=()=>......
  • glDebugMessageCallback函数是什么?
    图形编程想要调试并不是一件容易的事,有的时候渲染出全黑的结果基本上只能凭经验来查错,特别是对于着色器,断点日志都是无效的,因此想办法掌握一些调试方法还是有必要的,不然找错误的源头可能真的会非常困难参考:https://blog.csdn.net/Jaihk662/article/details/108801019glDebugMess......
  • (继续)完善PS端YOLO网络前向计算函数
    继续完善PS端YOLO网络前向计算函数目标在PS端实现YOLO网络的前向计算对不同的卷积层进行配置和优化比较PS端和Python端的计算结果前提PS端使用卷积计算模块,可以同时处理8个通道的数据PS端使用量化模块,可以对数据进行量化和反量化,以减少内存占用和提高运算速度PS端使用......
  • vue函数式组件
    <template>改为<templatefunctional>即可然后模板里使用到父组件参数的话,需在变量前面加上props,如<div>{{count}}</div>改为<div>{{props.count}}</div>如果组件比较简单,只是展示数据的话,可以使用函数式组件,函数式组件没有生命周期(beforeCreated、beforeDestroy),可提升......
  • vuex辅助函数使用
    一:mapState的使用此函数返回一个对象,生成计算属性-当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。mapState可以声明多个需要在组件中引入:需要在组件中引入:import{mapState}from'vuex'...mapState({/......
  • Python学习 -- 常用函数与实例详解
    在Python编程中,数据转换是一项关键任务,它允许我们在不同数据类型之间自由流动,从而提高代码的灵活性和效率。本篇博客将深入探讨常用的数据转换函数,并通过实际案例为你展示如何巧妙地在不同数据类型之间转换。数据类型转换函数Python提供了多种数据类型转换函数,以下是其中几个常用的......