SPOJLCMSUM - LCM Sum
简要题意
\(T\) 组数据,每组数据给出一个 \(n\),计算:
\]
\(1 \leq T \leq 3\times 10^5,1 \leq n \leq 10^{6}\)
思路
比较快乐的推式子题。
&\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的更多相关文章
- SP5971 LCMSUM - LCM Sum
一个基于观察不依赖于反演的做法. 首先 \(\rm lcm\) 是不好算的,转化为计算 \(\rm gcd\) 的问题,求: \[\sum\limits_{i = 1} ^ n \frac{in}{\ ...
- 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 ...
- 询问任意区间的min,max,gcd,lcm,sum,xor,or,and
给我们n个数,然后有m个询问,每个询问为L,R,询问区间[L,R]的最大最小值,最小公约数,最大公约数,和,异或,或,且 这些问题通通可以用RMQ的思想来解决. 以下用xor来作为例子 设dp[i][ ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- BZOJ 1853: [Scoi2010]幸运数字
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2117 Solved: 779[Submit][Status] ...
- 数位DP之小小结
资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...
- POJ 1879 Tempus et mobilius Time and motion 队列和栈
很简单的队列和栈的应用,不过读明白题意非常重要:(直接引用白书的题解)三个轨道,一个库.分别是分钟单位的轨道,5min单位的轨道,一小时单位的轨道,还有就是n容量的库.每过一分钟,一个小球从库里面出来 ...
- zoj 2836 容斥原理
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2836 #include <cstdio> #incl ...
- HDU4135Co-prime(容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目解析: 给你一个闭区间[A,B](1 <= A <= B <= 1015) ...
- HDU1796How many integers can you find(容斥原理)
在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
随机推荐
- MySQL开发
常用数据类型 整数:tinyint.int.bigint小数:decimal.字符串:char.varchar.text 增 insert into 表名(列名,列名)values(值,值): 删 d ...
- mybatis-增删改查和配置
加入log4j日志功能 加入依赖 <!-- log4j日志 --> <dependency> <groupId>log4j</groupId> < ...
- 更改安装Oracle数据库时设定的System sys等用户的密码
因本地Oracle数据库安装久远,不知道连接账号密码,查阅了一些资料最终修改成功,Mark up! 1 在开始菜单找到Oracle服务,打开SQL plus 2 输入命令连接到数据库并修改部分用户密码 ...
- Java8新特性—四大内置函数式接口
Java8新特性--四大内置函数式接口 预备知识 背景 Lambda 的设计者们为了让现有的功能与 Lambda 表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念. 什么是函数式接口? 函数 ...
- idea中springboot热部署(无需重启项目)
idea中springboot热部署(无需重启项目) 1.在pom.xml文件中导入依赖 <dependency> <groupId>org.springframework.b ...
- ubuntu生成pem证书连接服务器(已验证)
SSH 密钥认证是什么? 与用户密码登录相比,SSH 密钥认证更安全,因为只有拥有密钥的人才能连接,并且密钥通过不同的算法进行了很好的加密.它还通过无密码登录使 SSH 连接变得简单. 这个搞两个方案 ...
- 题解合集 (update on 11.5)
收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...
- 2022-11-10 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- ArrayList中的ConcurrentModificationException,并发修改异常,fail-fast机制。
一:什么时候出现? 当我们用迭代器循环list的时候,在其中用list的方法新增/删除元素,就会出现这个错误. package com.sinitek.aml; import java.util.Ar ...
- java基础知识-lambda表达式
一.什么是lambda? 在Java中,我们可以将一个值赋值给一个Java变量. int aValue = 129; String aString = "hello world"; ...