题面

题目要我们求这个:

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

开始化式子:

\[\sum_{i=1}^{n} \frac{i*n}{gcd(i,n)}
\]

\[\sum_{d|n} \sum_{i=1}^{\frac{n}{d}} i*n[gcd(i,\frac{n}{d})=1]
\]

\[n*\sum_{d|n}\sum_{i=1}^{d}i[gcd(i,d)=1]
\]

注意那个\(\sum_{i=1}^{d}i[gcd(i,d)=1]\)是求\([1,d]\)中所有与\(d\)互质的数的和,可以证明当\(d>1\)时,它等于\(\frac{d*\phi(d)}{2}\),证明如下:

对于每个\(i\),若它与\(d\)互质,则\(d-i\)也与\(d\)互质,每一对\(i\)与\(d-i\)的和为\(d\),所以平均每个与\(d\)互质的数的值为\(\frac{d}{2}\),一共有\(\phi(d)\)个与\(d\)互质的数,所以他们的和为\(\frac{d*\phi(d)}{2}\)

而与\(1\)互质的数的和显然为\(1\)

所以上式可化为

\[n*\big((\sum_{d|n,d>1}\frac{d*\phi(d)}{2})+1\big)
\]

\[\big( \frac{n}{2}*\sum_{d|n,d>1}d*\phi(d)\big)+n
\]

设\(g(n)=\sum_{d|n}d*\phi(d)\),上式化为:

\[\frac{n}{2}*(g(n)-1)+n
\]

其中\(g(n)\)是一个积性函数,可以\(O(n)\)筛出

每次询问是\(O(1)\)的

总时间复杂度为\(O(n+T)\)

关于如何线筛出\(g(n)\):

\(n\)为质数:\(g(n)=1+n*\phi(n)=1+n*(n-1)\)

\(n=p^k\):

\[g(n)=1+\sum_{i=1}^{k}p^i*\phi(p^i)
\]

\[=1+\sum_{i=1}^{k}p^i*p^{i-1}*(p-1)
\]

\[=1+(p-1)\sum_{i=1}^{k}p^{2i-1}
\]

\[=1+(p-1)\frac{p^{2k+1}-p}{p^2-1}
\]

\[=1+\frac{p^{2k+1}-p}{p+1}
\]

\(n\)的最小质因子为\(p\):\(g(n)=g(n'*p^k)=g(n')*g(p^k)\)

然后就可以线性筛了

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000007
#define ll long long
const int lim=1e6;
int pr[N],cnt,pk[N];
bool zhi[N];
ll f[N];
void Init()
{
int i,j;
f[1]=1;
for(i=2;i<=lim;i++)
{
if(!zhi[i])
{
pr[++cnt]=i,f[i]=1+1ll*i*(i-1);
pk[i]=i;
}
for(j=1;j<=cnt&&i*pr[j]<=lim;j++)
{
int p=pr[j],x=i*p;
zhi[x]=true;
if(i%p==0)
{
pk[x]=pk[i]*p;
f[x]=f[x/pk[x]]*(1+(1ll*pk[x]*pk[x]*p-p)/(p+1));
break;
}
pk[x]=p;
f[x]=f[i]*f[p];
}
}
for(i=1;i<=lim;i++)
f[i]=1ll*(f[i]-1)*i/2+i;
}
int main()
{
int t,n;
Init();
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%lld\n",f[n]);
}
return 0;
}

我原本的做法是用\(\mu\)暴力拆\([gcd(i,d)=1]\),但是那样做的复杂度是\(O(n\log n)\)的,也没有这个做法巧妙,这里就不讲了。

SP5971 LCMSUM 数论的更多相关文章

  1. bzoj 2226: [Spoj 5971] LCMSum 数论

    2226: [Spoj 5971] LCMSum Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 578  Solved: 259[Submit][St ...

  2. BZOJ 2226 [Spoj 5971] LCMSum | 数论拆式子

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2226 题解: 题目要求的是Σn*i/gcd(i,n) i∈[1,n] 把n提出来变成Σi/g ...

  3. SP5971 LCMSUM - LCM Sum

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

  4. X000011

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

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

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

  6. gcd套路变换

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

  7. BZOJ 2226 [Spoj 5971] LCMSum 最大公约数之和 | 数论

    BZOJ 2226 [Spoj 5971] LCMSum 这道题和上一道题十分类似. \[\begin{align*} \sum_{i = 1}^{n}\operatorname{LCM}(i, n) ...

  8. bzoj 2401: 陶陶的难题I 数论

    2401: 陶陶的难题I Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 89  Solved: 24[Submit][Status] Descript ...

  9. Codeforces Round #382 Div. 2【数论】

    C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...

随机推荐

  1. Android:Toolbar的图标尺寸问题

    之前一直使用的是Material Design的图标库,下载下来以后直接放入了对应文件夹,什么尺寸对应什么dpi都没有仔细研究过. 最近在Toolbar上添加几个不是MD图标库内的图标时发现,放入的图 ...

  2. docker-compose进阶

    笔者在前文<Docker Compose 简介>和<Dcoker Compose 原理>两篇文章中分别介绍了 docker compose 的基本概念以及实现原理.本文我们将继 ...

  3. windows查看某个端口被哪个进程占用

    找出端口对应的PID netstat -ano | findstr 8080 帮助命令netstat -? -a 显示所有连接和侦听端口. -n 以数字形式显示地址和端口号. -o 显示拥有的与每个连 ...

  4. iOS之Category关联属性

    Objective-C /** 原文件 */ // Person.h #import <Foundation/Foundation.h> @interface Person : NSObj ...

  5. SDk编程基础

    一.Android简介: 由Andy Rubin开发, 常用手机版本:谷哥:Nexus.华为:EMUI.魅族:Flyme Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的.应用通过权 ...

  6. Spring MVC 上传、下载、显示图片

    目录 1. 准备工作 1.1 数据库表准备 1.2 实体类 User 和 Mapper(DAO) 1.3 pom.xml 依赖包 1.4 SSM 框架的整合配置 2. 控制器 UserControll ...

  7. vue脚手架引入MD5加密函数

    可以在全局定义一个MD5的方法,然后引入到vue的脚手架中. 首先 npm install crypto --save 然后引用定义一个对象, import crypto from 'crypto'; ...

  8. Java开发环境之Git

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾叁章:Git安装教程 1)去官网下载Git安装包 https://gitforwindows.org/ 2)安装 双击执 ...

  9. FFMPEG 命令行工具- ffplay

    ffplay 简介 ffplay是ffmpeg工程中提供的播放器,功能相当的强大,凡是ffmpeg支持的视音频格式它基本上都支持.甚至连VLC不支持的一些流媒体都可以播放,但是它的缺点是其不是图形化界 ...

  10. Django 之restfromwork 源码分析以及使用之--视图组件

    restframework 源码分析以及使用 mixins 中的五种类方法 from rest_framework import mixins # mixins 中一种有五种类 # 第一种:用户保存数 ...