简要题意

\(T\) 组数据,每组数据给出一个 \(n\),计算:

\[\sum_{i=1}^{n}{\operatorname{lcm}(i,n)}
\]

\(1 \leq T \leq 3\times 10^5,1 \leq n \leq 10^{6}\)

思路

比较快乐的推式子题。

\[\begin{aligned}
&\sum_{i=1}^{n}{\operatorname{lcm}(i,n)}\\
&=\sum_{i=1}^{n}{\frac{in}{\gcd(i,n)}}\\
&=\frac{1}{2}(\sum_{i=1}^{n-1}{\frac{n^2}{\gcd(i,n)}})+n&\texttt{(1)}\\
&=\frac{1}{2}({\sum_{d\mid n}{\frac{n^2\varphi(n\div d)}{d}}})+n&\texttt{(2)}\\
&=n(\sum_{d\mid n}{\frac{1}{2}d\varphi(d)})+n&\texttt{(3)}
\end{aligned}
\]
  • \(\texttt{(1)}\):把上式拆成两个等价的式子的和除以二,发现错位相加就可以凑出来了。
  • \(\texttt{(2)}\):我们改为枚举 \(\gcd(i,n)\) 的值,不难发现 \(\gcd(i,n)\mid n\)。
  • \(\texttt{(3)}\):改为枚举上式中的 \(n\div d\),不知道为什么,直接算上式会有除以二的误差。

然后就可以做了。

时间复杂度 \(O(n\log n)\)。

代码

#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
using namespace std; int phi[10000005],t,n;
int ans[10000005]; void phi_table(int n) {
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (!phi[i]) {
for (int j = i; j <= n; j += i) {
if (!phi[j]) {
phi[j] = j;
}
phi[j] = phi[j] / i * (i - 1);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;(i*j)<=n;j++){
ans[i*j]+=j*phi[j]/2;
}
}
} signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
phi_table(1e6);
while(t--){
cin>>n;
cout<<((n*ans[n])+n)<<'\n';
}
return 0;
}

SPOJLCMSUM - LCM Sum的更多相关文章

  1. SP5971 LCMSUM - LCM Sum

    一个基于观察不依赖于反演的做法. 首先 \(\rm lcm\) 是不好算的,转化为计算 \(\rm gcd\) 的问题,求: \[\sum\limits_{i = 1} ^ n \frac{in}{\ ...

  2. 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 ...

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

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

  4. 数位DP入门

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

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

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

  6. 数位DP之小小结

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

  7. POJ 1879 Tempus et mobilius Time and motion 队列和栈

    很简单的队列和栈的应用,不过读明白题意非常重要:(直接引用白书的题解)三个轨道,一个库.分别是分钟单位的轨道,5min单位的轨道,一小时单位的轨道,还有就是n容量的库.每过一分钟,一个小球从库里面出来 ...

  8. zoj 2836 容斥原理

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2836 #include <cstdio> #incl ...

  9. HDU4135Co-prime(容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目解析: 给你一个闭区间[A,B](1 <= A <= B <= 1015) ...

  10. HDU1796How many integers can you find(容斥原理)

    在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...

随机推荐

  1. logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息

    文章目录 1.xml文件的编写 2.实现的效果 2.1 日志保存到磁盘 2.2 控制台输出的效果 放置的位置 1.xml文件的编写 logback-spring.xml <?xml versio ...

  2. 齐博x1第四季《模块插件的制作》系列21-公共表单器的参数选项(7)

    password 密码类型 和text一样,只不过type类型是password,密码类型输入时,显示星号.即Html中的密码框类型 icon 字体图标类型 和列表页一样,把css的字体图标引入到了表 ...

  3. 制作一个windows垃圾清理小程序

    制作一个windows垃圾清理小程序: 把下列代码保存为.bat文件(如垃圾清理.bat) 双击它就能很快地清理垃圾文件,大约一分钟不到. 就是下面的文字(这行不用复制)=============== ...

  4. v-debounce-throttle是一个vue防抖节流指令

    v-debounce-throttle是一个vue防抖节流指令 简介 v-debounce-throttle是一个vue防抖节流指令,控制单一事件的触发频率.其核心是拦截组件元素的v-on绑定事件,采 ...

  5. fastjson反序列化漏洞历史CVE学习整理

    fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...

  6. 缺省源&一些常用的码头

    #include <bits/stdc++.h> #define N 1000010 #define M 2000010 #define pii pair<int,int> # ...

  7. Go语言核心36讲07

    在前文中,我解释过代码块的含义.Go语言的代码块是一层套一层的,就像大圆套小圆. 一个代码块可以有若干个子代码块:但对于每个代码块,最多只会有一个直接包含它的代码块(后者可以简称为前者的外层代码块). ...

  8. 读 Clean Code,关于变量命名和可维护代码

    原文见 http://mindprod.com/jgloss/unmain.html 如何写出不能维护的代码 如何程序命名 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, ...

  9. Windows自带管理工具

    exe类notepad 记事本 control 控制面板 mstsc 远程桌面连接explorer 资源管理器 taskmgr 任务管理器resmon 资源监视器 perfmon 性能监视器reged ...

  10. UBOOT编译--- UBOOT的编译和链接选项详解(六)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 函数 cc-option 编译选项变量cc-option 定义在 scripts/Kbuild.incl ...