一个经典问题


\[
\sum_{k=1}^n\mathbb{lcm}(k,n)
\]

一般的做法是使用\(\varphi(n)\)函数。

不经典的做法

\[
\begin{align*}
\sum_{k=1}^n\mathbb{lcm}(k,n)
&=\sum_{k=1}^n\frac{nk}{\gcd(n,k)}\tag{gcd与lcm的关系}\\
&=\sum_{d|n}\sum_{k=1}^{n/d}\frac{ndk}{d}[\gcd(n,dk)=d]\tag{枚举gcd(n,k)}\\
&=\sum_{d|n}\sum_{k=1}^{n/d}nk[\gcd(\frac{n}{d},k)=1]\tag{同消去d}\\
&=n\sum_{d|n}\sum_{k=1}^dk[\gcd(d,k)=1]\tag{用d代替n/d}\\
&=n\sum_{d|n}\sum_{k=1}^dk\sum_{j|gcd(d,k)}\mu(j)\tag{莫比乌斯函数的性质}\\
&=n\sum_{j|n}\mu(j)\sum_{d|n/j}\sum_{k=1}^djk\tag{交换求和次序}\\
&=n\sum_{j|n}\mu(j)j\sum_{d|n/j}\frac{d(d+1)}{2}\tag{等差数列求和公式}\\
&=\frac{n}{2}\left(\sum_{j|n}\mu(j)j\sum_{d|n/j}d^2+\sum_{j|n}\mu(j)j\sum_{d|n/j}d\right)\tag{拆分}\\
&=\frac{n}{2}(f(n)+g(n))\tag{设元}\\
\end{align*}
\]

计算\(f(n)\)

考虑
\[
f(n)=\sum_{j|n}\mu(j)j\sum_{d|n/j}d^2
\]
易证\(\mu(j)j\)和\(\sum\limits_{d|n}d^2\)都是积性函数。

则\(f(n)\)为积性函数\(\mu(j)j\)和\(\sum\limits_{d|n}d^2\)的狄利克雷卷积,可得\(f(n)\)为积性函数。

则\(f(n)\)可用欧拉筛法求出如下:
\[
\begin{align*}
f(p^k)
&=\mu(1)\sum_{d=0}^k(p^d)^2+\mu(p)p\sum_{d=0}^{k-1}(p^d)^2\tag{莫比乌斯函数的性质}\\
&=\sum_{d=0}^kp^{2d}-\sum_{d=0}^{k-1}p^{2d+1}\tag{整理}\\
&=\sum_{d=0}^{2k}(-p)^k\tag{合并}\\
&=\frac{1-(-p)^{2k+1}}{1+p}\tag{等比数列求和公式}\\
&=\frac{1+p^{2k+1}}{1+p}\tag{整理}\\
\end{align*}
\]

再维护一个最小质因数的次数\(p^k\)即可。

计算\(g(n)\)

考虑
\[
g(n)=\sum_{j|n}\mu(j)j\sum_{d|n/j}d
\]
同上,可得\(g(n)\)为积性函数。

则\(g(n)\)可

用欧拉筛法求出如下:
\[
\begin{align*}
g(p^k)
&=\mu(1)\sum_{d=0}^kj^d+\mu(p)p\sum_{d=0}^{k-1}j^d\tag{莫比乌斯函数的性质}\\
&=\sum_{d=0}^kj^d-\sum_{d=1}^{k}j^d\tag{整理}\\
&=1\tag{展开}\\
\end{align*}
\]
我们可以惊讶地发现\(g(n)\)恒等于\(1\)!

总结

则我们可以每次\(O(1)\)地求出
\[
\sum_{k=1}^n\mathbb{lcm}(k,n)=\frac{n}{2}(f(n)+1)
\]

最新文章

  1. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
  2. python模块介绍二。
  3. HDU 1000 & HDU1001 & 字符串连接
  4. The Guide To Understanding mysqlreport
  5. 双网卡route配置
  6. Codeforces 276D Little Girl and Maximum XOR
  7. php学习笔记(3)
  8. Ruby on rails3
  9. 解密:Amazon亚马逊产品Listing关键词刷单排名原理
  10. http理解
  11. c++中函数的参数传递,内联函数和默认实参的理解
  12. FreeRTOS 任务与调度器(1)
  13. 在引用的laravel的@include子模板中传递参数
  14. linux虚拟机与winodows共享文件夹----linux安装VMware tools
  15. C++题目一道: 重载`->': 您真的懂成员访问运算符的重载吗?
  16. Jboss7 部署EJB3 简明教程
  17. Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
  18. 19.Selenium+Python生成测试报告
  19. P1297 [国家集训队]单选错位
  20. RabbitMQ学习系列二-C#代码发送消息

热门文章

  1. jdango 2.x的url配置的改变
  2. 开始编写Makefile(三)Makefile的默认模式规则
  3. 洛谷P5017摆渡车
  4. flutter 省市区选择器 city_pickers 的简单实用
  5. Chrome浏览器控制台[DOM] Password field is not contained in a form:
  6. ModuleNotFoundError: No module named 'cv2'
  7. python 链表的反转
  8. 「雅礼集训 2018 Day2」农民
  9. Ubuntu 18.04.1 安装mysql 5.7.27
  10. 如何登陆Tomcat的控制台