首页 > 其他分享 >51nod 1227 平均最小公倍数 题解

51nod 1227 平均最小公倍数 题解

时间:2023-05-11 19:57:04浏览次数:36  
标签:1227 frac gcd 公倍数 题解 sum varphi mu text

题目大意

\[A(n)=\frac{1}{n} \sum_{i=1}^{n} \text{lcm}(n,i)\\ F(a,b)=\sum_{i=a}^{b} A(i)\\ \]

给定 \(a,b\),求 \(F(a,b) \mod 10^9+7\)。

\(1 \le a \le b \le 10^9\)。

思路

首先我们可以想到,如果我们定义 \(B(n)=\underset{i=1}{\overset{n}{\sum}} A(i)\),那么 \(F(a,b)=B(b)-B(a-1)\)。

然后我们开始逐层推式子。

\[A(n)=\frac{1}{n} \sum_{i=1}^{n} \text{lcm}(n,i)\\ \ \ \ \ \ \ \ \ \ =\frac{1}{n} \sum_{i=1}^{n} \frac{n \times i}{\gcd(n,i)}\\ \ \ \ \ =\sum_{i=1}^{n} \frac{i}{\gcd(n,i)} \]

然后代入 \(B(n)\) 中,根据套路枚举因数,将分母上的 \(\gcd\) 拿出来:

\[B(n)=\sum_{i=1}^{n} A(i)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ =\sum_{i=1}^{n} \sum_{j=1}^{i} \frac{j}{\gcd(i,j)}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \ =\sum_{i=1}^{n} \sum_{d|i} \sum_{j=1}^{i} \frac{j}{d}[\gcd(i,j)=d]\\ \ \ \ \ \ =\sum_{i=1}^{n} \sum_{d|i} \sum_{j=1}^{i} \frac{j}{d}[\gcd(\frac{i}{d},\frac{j}{d})=1]\\ \ =\sum_{i=1}^{n} \sum_{d|i} \sum_{j=1}^{\frac{i}{d}} j[\gcd(\frac{i}{d},j)=1]\\ \ \ \ \ \ \ \ \ =\sum_{d=1}^{n} \sum_{i=1}^{n} [d|i]\sum_{j=1}^{\frac{i}{d}} j[\gcd(\frac{i}{d},j)=1]\\ =\sum_{d=1}^{n} \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{i} j[\gcd(i,j)=1]\\ \]

然后我们再用莫比乌斯反演把 \(\gcd\) 打开:

\[\sum_{j=1}^{i} j[\gcd(i,j)=1]=\sum_{j=1}^{i} j \sum_{x|\gcd(i,j)} \mu(x)\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{x|i} \mu(x) \sum_{j=1}^{i} j[j \mod x = 0]\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{x|i} \mu(x) \sum_{j=1}^{\frac{i}{x}} xj\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{x|i} \mu(x) \frac{1}{2}x(1+\frac{i}{x})\frac{i}{x}\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{i}{2} \sum_{x|i} \mu(x) (1+\frac{i}{x})\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{i}{2} (\sum_{x|i} \mu(x) + \sum_{x|i} \frac{i}{x}\mu(x))\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{i}{2} ([i=1]+ \varphi(i))\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{1}{2} ([i=1]+i\varphi(i)) \]

然后我们把这一坨放回原来的式子:

\[B(n)=\sum_{d=1}^{n} \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{i} j[\gcd(i,j)=1]\\ \ \ \ \ \ =\frac{1}{2} \sum_{d=1}^{n} \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} [i=1]+i\varphi(i)\\ =\frac{n}{2} + \frac{1}{2} \sum_{d=1}^{n} \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} i\varphi(i)\\ \]

然后我们设 \(f(i)=i\varphi(i)\),我们可以简单地推导出 \(f\) 是一个积性函数。

对于互质的两个数 \(a,b\),\(f(a)f(b)=ab\varphi(a)\varphi(b)\)。

因为 \(\varphi(n)\) 是积性函数,所以 \(\varphi(a)\varphi(b)=\varphi(ab)\)。

所以 \(f(a)f(b)=ab\varphi(ab)=f(ab)\)。

后面是一个整除分块,所以现在我们需要求的实际上是积性函数 \(f(n)\) 的前缀和,可以想到使用杜教筛:

\[(\text{Id}*f)(i)=\sum_{d|i}f(d) \times \text{Id}(\frac{i}{d})\\ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{d|i}d\varphi(d) \times \frac{i}{d}\\ \ \ \ \ =i\sum_{d|i}\varphi(d)\\ =i^2\ \ \ \ \ \ \ \ \]

代入杜教筛公式中,得到:

\[\text{Id}(1)S(n)=\sum_{i=1}^{n} (\text{Id}*f)(i) - \sum_{i=2}^{n} \text{Id}(i)S(\lfloor\frac{n}{i}\rfloor)\\ S(n)=\sum_{i=1}^{n} i^2 - \sum_{i=2}^{n}iS(\lfloor\frac{n}{i}\rfloor) \]

这样我们就求得了 \(S(n)\)。

最后我们利用推出来的公式求解 \(B(n)\) 就好了。

代码实现


尾声

如果你发现了问题,你可以直接回复这篇题解

如果你有更好的想法,也可以直接回复!

标签:1227,frac,gcd,公倍数,题解,sum,varphi,mu,text
From: https://www.cnblogs.com/zsc985246/p/17392004.html

相关文章

  • 【题解】P4331 [BalticOI 2004]Sequence 数字序列
    以各种方式出现被玩烂的题目,算是小trick题?cpeditor意外地好用思路可并堆。平行时空同位体:CF13CP4331P4597CF713CP2893已知做法:\(O(n^2)\)dp:令\(f[i][j]\)为前\(i\)个数不超过\(j\)的最小代价优化:使用堆维护dp产生的折线(P4597题解区)\(O(n\logn......
  • AtCoder Beginner Contest 298 题解
    题面:https://atcoder.jp/contests/abc298/tasks_printA-JobInterview直接模拟即可。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>usingnamespace......
  • # Codeforces Round 872 (Div. 2) 题解
    CodeforcesRound872(Div.2)题解A.LuoTianyiandthePalindromeString略B.LuoTianyiandtheTable略C.LuoTianyiandtheShow略D1.LuoTianyiandtheFloatingIslands(EasyVersion)题意在树上随机撒\(k(k\leq3)\)个关键点,规定一个点是好的当且仅当这个......
  • springboot跨域问题解决方案
    以下内容仅供自己学习使用,侵权私聊必删。在进行前后端交互的时候,往往会遇到以下的跨域问题。那么解决这种跨域的话,可以使用以下这种方法:(引自于程序员青戈)创建config配置目录新建CorsConfig类然后把下面的内容复制进去根据自己需要修改以下就可以解决跨域问题啦importo......
  • P1676 [USACO05FEB] Aggressive cows G 题解
    题目传送门解题思路最大值最小化问题,考虑二分答案。首先要排序,保证序列单调不降,然后求出两个隔间之间的距离。sort(a+1,a+1+n);for(rii=1;i<=n;i++) dis[i]=a[i+1]-a[i];二分出一个\(mid\),判断它是否合法:每次累加距离,如果距离和比\(mid\)大,说明当前可以分配牛,记录数量......
  • Codeforces Round 683 (Div. 1, by Meet IT) ABCDF题解
    F和D都在ABC上做过类似的,但是没打好,道心破碎。。。。A.Knapsack若物品质量在[(w+1)/2,w]之间做完了否则一直贪心加voidsolve(){intn;llw;cin>>n>>w;intc=n;for(inti=1;i<=n;i++){cin>>a[i];if(a[i]>w)c--;}if(!c){......
  • Linux环境下,输入文件的编码格式和系统格式导致的问题解决办法
    1.用vim111.txt进入查看状态 2系统格式的查看和修改查看指令:setfileformat修改指令:setfileformat=unix3编码格式的查看和修改 查看指令 :setfileencoding 修改指令 在Vim中直接实行转换文件编码,比如将一个文件转换成u......
  • linux静态库的制作及问题解决
       首先介绍下分文件,在学习或者开发中,实现一个项目需要实现很多的功能,那么这些功能不可能在一个".c"文件下实现,需要多个".c"文件来共同实现,但是程序的入口只有一个,就体现了分文件编程的重要性,在主函数中调用其余的功能函数。分文件编程的优点及意义就是:分模块编程思......
  • CF1825D1 题解
    一、题目描述:给定$n$和$k$,表示有$n$个点,其中有$k$个点是关键点,这$k$个点随机分布。给出$n$个点的连接方式,保证构成一棵树,求有期望多少个点使得这个点到$k$个关键点的距离之和最小,答案对$1e9+7$取模。数据范围:$1\leqn\leq2e5,1\leqk\leqmin(n,3)......
  • 使用vue的keep-alive缓存组件,三级菜单组件无法缓存问题解决
    使用vue做后台管理系统,需求是所有的菜单打开之后,下次点击的时候的使用缓存,这里很简单的做法就是用来包裹住;但是一级菜单和二级菜单都没有问题,三级菜单就会出现无法缓存的问题,网上找资料说是vue中keep-alive本身存在的缺陷,需要在路由守卫中将matched属性做一下优化,具体如下//......