数论题中(杜教筛)交换求和符号

数论题中(杜教筛)交换求和符号文章目录方阵下三角约数倍数狄利克雷卷积以及杜教筛学习笔记突然对交换求和符号有了新的理解了,用矩阵转置的思路就很好理解,外层循环相当于枚举行,内层枚举列,交换次序就是先枚举列,再枚举行方阵正常的就是∑i=1n∑j=1nf(i,j)=∑j=1n∑i=1nf(i,j)\sum_{i=1}^n\sum_{j=1}^nf(i,j)=\sum_{j=1}^n\sum_{i=1}^nf(i,j)…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


狄利克雷卷积 以及 杜教筛学习笔记

突然对交换求和符号有了新的理解了,用矩阵转置的思路就很好理解,外层循环相当于枚举行,内层枚举列,交换次序就是先枚举列,再枚举行

方阵

正常的就是 ∑ i = 1 n ∑ j = 1 n f ( i , j ) = ∑ j = 1 n ∑ i = 1 n f ( i , j ) \sum_{i=1}^n \sum_{j=1}^nf(i,j)=\sum_{j=1}^n \sum_{i=1}^nf(i,j) i=1nj=1nf(i,j)=j=1ni=1nf(i,j)

再写成习惯的i在外面,j在里面,相当于换哈元 = ∑ i = 1 n ∑ j = 1 n f ( j , i ) =\sum_{i=1}^n \sum_{j=1}^nf(j,i) =i=1nj=1nf(j,i)
相当于原来元素 f ( i , j ) f(i,j) f(i,j)的位置变成了 f ( j , i ) f(j,i) f(j,i)

下三角

∑ i = 1 n ∑ j = i n f ( i , j ) = ∑ j = 1 n ∑ j = i n f ( i , j ) \sum_{i=1}^n \sum_{j=i}^nf(i,j)=\sum_{j=1}^n \sum_{j=i}^nf(i,j) i=1nj=inf(i,j)=j=1nj=inf(i,j)
这个就是常见的去重的时候的枚举,行数不超过列数
同样想成想成先枚举列再枚举行
换哈元 = ∑ i = 1 n ∑ j = i n f ( j , i ) =\sum_{i=1}^n \sum_{j=i}^nf(j,i) =i=1nj=inf(j,i)和上面差不多

约数倍数

如果上面的很容易理解来试一哈这种约数倍数的哇,这个就是像杜教筛的题里面要用到的
∑ i = 1 n ∑ j ∣ i n f ( i , j ) = ? \sum_{i=1}^n\sum_{j|i}^nf(i,j)=? i=1njinf(i,j)=?
其中 i ∣ j i|j ij是表示 i 是 j i是j ij的约数,比如当 j = 6 j=6 j=6的时候, i i i就要枚举 1 , 2 , 3 , 6 1,2,3,6 1,2,3,6

这个也要从矩阵转置的角度来看,长得也和下三角差不多,只不过没有完全填充

交换次序就是先枚举列再枚举行,变成
∑ j = 1 n ∑ j ∣ i n f ( i , j ) \sum_{j=1}^n\sum_{j|i}^nf(i,j) j=1njinf(i,j)
这里内层求和还是 j 是 i 的 约 数 , i 是 j 的 倍 数 , 也 就 是 i = k j , k = 1 , 2 , 3… j是i的约数,i是j的倍数,也就是i=kj,k=1,2,3… ji,ij,i=kj,k=1,2,3...
所以在内层求和我们就阔以直接除以 j j j,这样 i i i就阔以从 1 1 1开始枚举了
变成 ∑ j = 1 n ∑ i = 1 [ n j ] f ( i j , j ) , 因 为 要 保 持 不 变 , 里 面 就 要 变 成 f ( i ⋅ j , j ) \sum_{j=1}^n\sum_{i=1}^{[\frac{n}{j}]}f(ij,j),因为要保持不变,里面就要变成f(i\cdot j,j) j=1ni=1[jn]f(ij,j),,f(ij,j)
然后再换一哈字母变成熟悉的样子,就变成了:
∑ i = 1 n ∑ j = 1 [ n i ] f ( j i , i ) \sum_{i=1}^n\sum_{j=1}^{[\frac{n}{i}]}f(ji,i) i=1nj=1[in]f(ji,i)
最 终 的 等 式 就 是 : ∑ i = 1 n ∑ j ∣ i n f ( i , j ) = ∑ i = 1 n ∑ j = 1 [ n i ] f ( j i , i ) 最终的等式就是:\sum_{i=1}^n\sum_{j|i}^nf(i,j)=\sum_{i=1}^n\sum_{j=1}^{[\frac{n}{i}]}f(ji,i) :i=1njinf(i,j)=i=1nj=1[in]f(ji,i)
那我们就用杜教筛的式子来套一哈喃,看对不对,原等式是这样的:
∑ i = 1 n ∑ d ∣ i n g ( d ) ⋅ f ( i d ) = ∑ i = 1 n g ( i ) ⋅ ∑ j = 1 n i f ( j ) \sum_{i=1}^n\sum_{d|i}^ng(d)\cdot f(\frac{i}{d})=\sum_{i=1}^ng(i)\cdot \sum_{j=1}^{\frac{n}{i}}f(j) i=1nding(d)f(di)=i=1ng(i)j=1inf(j)
这里把 j j j换成 d d d更有约数这个含义一些,不影响,其中的
∑ i = 1 n ∑ d ∣ i n g ( d ) ⋅ f ( i d ) = ∑ i = 1 n ∑ d = 1 [ n i ] g ( d ) ⋅ f ( d i d ) = ∑ i = 1 n ∑ d = 1 [ n i ] g ( d ) ⋅ f ( i ) , 然 后 g ( d ) 阔 以 提 出 去 = ∑ i = 1 n g ( i ) ⋅ ∑ j = 1 n i f ( j ) \sum_{i=1}^n\sum_{d|i}^ng(d)\cdot f(\frac{i}{d})=\sum_{i=1}^n\sum_{d=1}^{[\frac{n}{i}]}g(d)\cdot f(\frac{di}{d})=\sum_{i=1}^n\sum_{d=1}^{[\frac{n}{i}]}g(d)\cdot f(i),然后g(d)阔以提出去=\sum_{i=1}^ng(i)\cdot \sum_{j=1}^{\frac{n}{i}}f(j) i=1nding(d)f(di)=i=1nd=1[in]g(d)f(ddi)=i=1nd=1[in]g(d)f(i),g(d)=i=1ng(i)j=1inf(j)
嗯(✪ω✪)一模一样٩(๑>◡<๑)۶

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182682.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vc怎么改变背景颜色_vc运行界面怎么设置颜色

    vc怎么改变背景颜色_vc运行界面怎么设置颜色最近眼睛发炎,特别怕亮色,看到vc的开发环境都太亮,于是想修改。1>在菜单”Tools”->”Options”的最后一页”Format”中选择“sourcewindow”,将前景色改为黑色,将背景色改为淡灰色。2>改变系统的窗口背景色.设置方法:桌面右击属性选择外观

    2022年8月12日
    41
  • c语言递归求组合数_c语言求一维数组元素之和

    c语言递归求组合数_c语言求一维数组元素之和C语言递归实现数组求和一.基本思想(分而治之):1.基线条件:显然最简单的情况:数组只有一个数时,无需任何操作,直接返回其值即可;所以基线条件为数组长度为1;2.递归条件:每一次加上数组最后一位并缩短数组长度以丢掉它;二.问题及解决1.数组的输入问题:怎么实现让自己输入自己想求得的数组的和,而不是只能求固定数组。解:利用c99变长数组,自己输入数组长度和具体数字;(缺陷:需要用户…

    2022年10月2日
    0
  • 我的RTOS 之六 — Touch移植(s5pv210+threadx+ucgui+touch)「建议收藏」

    我的RTOS 之六 — Touch移植(s5pv210+threadx+ucgui+touch)

    2022年1月29日
    45
  • pycharm 格式化代码[通俗易懂]

    pycharm 格式化代码[通俗易懂]有时候将空格键和tab键混用,在windows上没什么事情,但是如果移动到linux就会有问题,所以我们在移动到linux上之前要先格式化一下代码:ctrl+alt+L可以格式化,但是和锁屏快捷键冲突。 也可以,先选中代码,使用快捷键 ctrl+alt+i 。 …

    2022年8月25日
    3
  • 大数据DBA:大数据数据库管理做什么

    大数据DBA:大数据数据库管理做什么在大数据快速发展的大背景下,大数据相关的岗位需求也在增多,并且随着大数据业务的扩展,大数据技术团队的工作,也开始走向岗位细分,比如说在大数据储存阶段,也有专门的大数据DBA岗位。今天我们就来了解一下大数据数据库管理做什么?DBA,DBA是英文DatabaseAdministrator的简称,也就是数据库管理员,主要工作任务是负责维护和管理数据库服务器。数据库管理员,是需要关注数据,也需要关注库,即需要关注数据与服务,要关心如何操作数据库(程序),从而来保障好数据库。这就要求DBA不要只做好.

    2022年5月23日
    48
  • 凸函数与凹函数的区别_convex中文

    凸函数与凹函数的区别_convex中文读文章和学习过程中经常会遇到concave,convex以及down,up的组合。怎样区分呢?下面有一些摘自网络的定义,不同情况下应有不同的定义,以下仅供参考:定义一:当四种都存在时:上凹(conve

    2022年8月5日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号