一个基于观察不依赖于反演的做法。

首先 \(\rm lcm\) 是不好算的,转化为计算 \(\rm gcd\) 的问题,求:

\[\sum\limits_{i = 1} ^ n \frac{in}{\gcd(i, n)}
\]

注意到 \(\gcd(n - i, n) = \gcd(i, n), (n - i) \times n + in = n ^ 2\),可以考虑将 \(\gcd(n - i, n), \gcd(i, n)\) 一起计算。

具体地,将原式乘 \(2\), 前后配对。需要注意的是会多出一项,需要额外拿出来。

\[\frac{1}{2} (\sum\limits_{i = 1} ^ n \frac{n ^ 2}{\gcd(i, n)} + n)
\]

按照技巧枚举 \(d = \gcd(i, n)\):

\[\frac{1}{2} (\sum\limits_{d \mid n} \sum\limits_{i = 1} ^ n \frac{n ^ 2}{d} [\gcd(i, n) = d] + n)
\]

后面的部分可以除去 \(d\):

\[\frac{1}{2} (\sum\limits_{d \mid n} \sum\limits_{i = 1} ^ {\frac{n}{d}} \frac{n ^ 2}{d} [\gcd(i, n) = 1] + n)
\]

即:

\[\frac{1}{2} (\sum\limits_{d \mid n} \frac{n ^ 2}{d} \times \varphi(\frac{n}{d}) + n)
\]

方便起见枚举 \(d = \frac{n}{d}\):

\[\frac{n}{2} (n \times \sum\limits_{d \mid n} \times d \varphi(d) + 1)
\]

中间的求和部分与 \(n\) 无关,直接枚举 \(d\) 再枚举倍数累加贡献即可,复杂度 \(O(n \ln n + T)\)。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 1000000 + 5;
bool iprime[N];
int T, n, tot, phi[N], ans[N], prime[N];
int read() {
char c; int x = 0, f = 1;
c = getchar();
while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
signed main() {
T = read();
iprime[1] = phi[1] = 1;
rep(i, 2, N - 5) {
if(!iprime[i]) prime[++tot] = i, phi[i] = i - 1;
for (int j = 1; j <= tot && i * prime[j] <= N - 5; ++j) {
iprime[i * prime[j]] = 1;
if(i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; break;}
phi[i * prime[j]] = phi[i] * phi[prime[j]];
}
}
rep(i, 1, N - 5) for (int j = i; j <= N - 5; j += i) ans[j] += i * phi[i];
while (T--) n = read(), printf("%lld\n", (n * ans[n] + n) / 2);
return 0;
}

值得一提的是,如果答案贡献式各个部分都包含变量时,通过观察和一些技巧减少变量的个数是一种简化问题的手段。

SP5971 LCMSUM - LCM Sum的更多相关文章

  1. SPOJ LCMSUM - LCM Sum

    题意是求: $\sum_{i = 1}^{n}lcm(i, n)$ $= \sum_{i = 1}^{n}\frac{ni}{gcd(i, n)}$ $= n\sum_{i = 1}^{n}\frac ...

  2. SP5971 LCMSUM 数论

    题面 题目要我们求这个: \[\sum_{i=1}^n lcm(i,n)\] 开始化式子: \[\sum_{i=1}^{n} \frac{i*n}{gcd(i,n)}\] \[\sum_{d|n} \ ...

  3. 询问任意区间的min,max,gcd,lcm,sum,xor,or,and

    给我们n个数,然后有m个询问,每个询问为L,R,询问区间[L,R]的最大最小值,最小公约数,最大公约数,和,异或,或,且 这些问题通通可以用RMQ的思想来解决. 以下用xor来作为例子 设dp[i][ ...

  4. gcd套路变换

    gcd套路变换 GCD https://www.luogu.org/problem/P2568 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. $ 1& ...

  5. X000011

    P1890 gcd区间 \(\gcd\) 是满足结合律的,所以考虑用 ST 表解决 时间复杂度 \(O((n\log n+m)\log a_i)\) 考虑到 \(n\) 很小,你也可以直接算出所有的区 ...

  6. 初等数论学习笔记 III:数论函数与筛法

    初等数论学习笔记 I:同余相关. 初等数论学习笔记 II:分解质因数. 1. 数论函数 本篇笔记所有内容均与数论函数相关.因此充分了解各种数论函数的名称,定义,符号和性质是必要的. 1.1 相关定义 ...

  7. 数位DP入门

    HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...

  8. BZOJ 1853: [Scoi2010]幸运数字

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2117  Solved: 779[Submit][Status] ...

  9. 数位DP之小小结

    资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...

随机推荐

  1. 「算法笔记」旋转 Treap

    一.引入 随机数据中,BST 一次操作的期望复杂度为 \(\mathcal{O}(\log n)\). 然而,BST 很容易退化,例如在 BST 中一次插入一个有序序列,将会得到一条链,平均每次操作的 ...

  2. 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题

    目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...

  3. 20道JavaScript经典面试题

    该篇文章整理了一些前端经典面试题,附带详解,涉及到JavaScript多方面知识点,满满都是干货-建议收藏阅读 前言 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发,关注 前端南玖 ...

  4. Hadoop Jobhistory配置启用

    Hadoop Jobhistory记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下, 默认情况下是没有启动的,需要配置完后手工启动服务. 1.修改hadoop的配置文件mapre ...

  5. mybatis学习笔记(三)

    使用mapper接口来实现数据操作 创建UserMapper接口,添加方法,方法名要与UserMappper.xml中id所一致并且接口名要与编写sql语句的xmL文件名同名.namespace 中的 ...

  6. Go语言系列之标准库ioutil

    ioutil标准库中提供了一些常用.方便的IO操作函数 一.相关方法 func ReadAll(r io.Reader) ([]byte, error) func ReadDir(dirname st ...

  7. 智能集成接口:I3 ISA-95 的应用

    介绍 多年来,使用基于制造运营管理 (MOM) 的应用程序的制造 IT 顾问试图说服制造商这些类型的应用的高价值.实时 MOM 解决方案是唯一一组能够精确优化工厂日常运营的 IT 应用程序,可为其可用 ...

  8. dubbo泛化引发的生产故障之dubbo隐藏的坑

    dubbo泛化引发的生产故障之dubbo隐藏的坑 上个月公司zk集群发生了一次故障,然后要求所有项目组自检有无使用Dubbo编程式/泛化调用,强制使用@Reference生成Consumer.具体原因 ...

  9. tomcat容器启动失败疑难问题解决方案

    严重: 子容器启动失败java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 初始化组件[or ...

  10. 【解决了一个小问题】alert manager中的cluster.advertise-address参数是什么意思?

    如果在启动 alert manager的时候,不填写参数: /usr/bin/alertmanager --config.file=/etc/alert_manager/alertmanager.ya ...