题意

求 $\sum_{i=a}^b \sum_{j=1}^i \frac{lcm(i,j)}{i}$.

分析

只需要求出前缀和,

$$\begin{aligned}
\sum_{i=1}^n \sum_{j=1}^i \frac{lcm(i,j)}{i} &= \sum_{i=1}^n \sum_{j=1}^i \frac{j}{gcd(i,j)} \\
&= \sum_{d=1}^n \sum _{i=1}^n \sum_{j=1}^i \frac{j}{d} \cdot [gcd(i,j)=1] \\
&=  \sum_{d=1}^n \sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor} \sum_{j=1}^i j \cdot [gcd(i,j)=1]
\end{aligned}$$

其后面部分提出来,即求 $\sum_{i=1}^n i\cdot [gcd(i,n)=1]$,对于这种一个值固定的gcd求和有一个套路,即倒序两两配对:

若 $n=1$,和为1;

若 $n>1$,因为 $gcd(i, n) = gcd(n-i, n)$ 且 $\displaystyle  \sum_{i=1}^n i\cdot [gcd(i,n)=1] = \sum_{i=1}^{n-1} i\cdot [gcd(i,n)=1]$,

$\displaystyle \sum_{i=1}^{n-1} i \cdot [gcd(i,n)=1] + \sum_{i=n-1}^1i\cdot [gcd(i,n)=1] = n\varphi (n)$,所以和为 $ n\varphi (n) /2$.

综合得 $\displaystyle \sum_{i=1}^n i\cdot [gcd(i,n)=1] = \frac{n\varphi (n)+[n=1]}{2}$.

具体实现上,$[i=1]$ 只成立 $n$,除2可以提出来,即 原式 = $\displaystyle \frac{1}{2}(\sum_{d=1}^n \sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor} i\varphi (i) + n)$.

现在唯一得问题是如何求 $\displaystyle  S(n) = \sum_{i=1}^n i\varphi (i)$.

根据杜教筛,

设 $\displaystyle S(n) = \sum_{i=1}^n f(i)$,$f(n) = n\varphi (n), \ g(n) = n$.

$\displaystyle f*g = \sum_{d|n} d \varphi (d) \cdot \frac{n}{d} = n\sum_{d|n}\varphi (d) = n^2$.

因此 $\displaystyle S(n) = \sum_{i=1}^n i^2 - \sum_{d=2}^n d\cdot S(\left \lfloor \frac{n}{d} \right \rfloor)$.

再最外层套个数论分块即可。

代码

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
#include<unordered_map>
using namespace std;
const int maxn = ;
typedef long long ll;
const ll mod = ;
const ll inv2 = (mod+)>>;
const ll inv6 = ; //
ll T, a, b, pri[maxn], tot, phi[maxn], sum_phi_d[maxn];
bool vis[maxn];
unordered_map<ll, ll> mp_phi_d; //可换成unordered_map,约快3倍
ll S_phi_d(ll x) {
if (x < maxn) return sum_phi_d[x];
if (mp_phi_d[x]) return mp_phi_d[x];
ll ret = x * (x+) % mod * (*x%mod+) % mod * inv6 % mod; //%敲成*,浪费一个小时
for (ll i = , j; i <= x; i = j + ) {
j = x / (x / i);
ret =(ret - S_phi_d(x / i) * (i+j) % mod * (j-i+) % mod * inv2 % mod + mod) % mod;
}
return mp_phi_d[x] = ret;
}
void initPhi_d()
{
phi[] = ;
for (int i = ; i < maxn; i++) {
if (!vis[i]) pri[++tot] = i, phi[i] = i-;
for (int j = ; j <= tot && i * pri[j] < maxn; j++) {
vis[i * pri[j]] = true;
if (i % pri[j] == )
{
phi[i * pri[j]] = phi[i] * pri[j] % mod;
break;
}
else
{
phi[i * pri[j]] = phi[i] * phi[pri[j]] % mod;
}
}
}
for (int i = ; i < maxn; i++) sum_phi_d[i] = (sum_phi_d[i - ] + phi[i]*i) % mod;
}
ll solve(ll n)
{
ll res = ;
for(ll i = , j;i <= n;i = j+)
{
j = n / (n / i);
res = (res + S_phi_d(n/i) * (j-i+) % mod) % mod;
}
return (res+n)*inv2%mod;
} int main() {
initPhi_d();
scanf("%lld%lld", &a, &b);
printf("%lld\n", (solve(b)-solve(a-)+mod) % mod);
return ;
}

参考链接:

1. https://blog.csdn.net/FromATP/article/details/74999989

2. https://www.cnblogs.com/owenyu/p/7397687.html

[51nod1227]平均最小公倍数(莫比乌斯反演+杜教筛)的更多相关文章

  1. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  2. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  3. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  4. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

  5. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

  6. 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】

    用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...

  7. [HDU 5608]Function(莫比乌斯反演 + 杜教筛)

    题目描述 有N2−3N+2=∑d∣Nf(d)N^2-3N+2=\sum_{d|N} f(d)N2−3N+2=∑d∣N​f(d) 求∑i=1Nf(i)\sum_{i=1}^{N} f(i)∑i=1N​f ...

  8. BSOJ5467 [CSPX2017#3]整数 莫比乌斯反演+杜教筛

    题意简述 给你两个整数\(n\),\(k\),让你求出这个式子 \[ \sum_{a_1=1}^n \sum_{a_2=a_1}^n \sum_{a_3=a_2}^n \cdots \sum_{a_k ...

  9. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

随机推荐

  1. OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  2. MySQL中的相关表操作

    简单表操作 1.表操作之修改表 .修改表名 alter table 表名 rename 新表名 .增加字段 alter table 表名 add 新字段名 数据类型[相关约束性条件...], add ...

  3. "中台"论再议

    前言:讲中台的太多了,好像似乎不提中台就没法在IT圈混,但对中台又缺少统一明确的定义,姑且听其言,择其精华.最近看到一篇将中台的,觉得还不错,记录下来,分享给大家. 硅谷的“中台论” 在国内创立智领云 ...

  4. HandlerInterceptorAdapter

    handler,是指controller的@Controller注解下的整个方法名

  5. 学习Linq之前必须要了解的扩展方法

    本文主要以下面几个方面来详细讲解扩展方法:在C#3.0之前没有扩展方法的状态(或者你不会使用不知道扩展方法的时候).扩展方法的语法及怎么使用.怎么正确的使用扩展方法: 一.首先说一下在C#3.0之前没 ...

  6. vue中如果在页面中v-model的是字典,那么在定义字典的时候,需要明确定义键值为''或者[],否则给字典的键值赋值后页面不显示

    如题 在template模板中 {{}} {{form_temp.blOwnerMemberList}} #是字典的形式哦 {{}} 在return的属性中 form_temp: { blOwnerM ...

  7. ThinkPHP各个目录是什么含义ThinkPHP怎么安装和使用

    最近kdchxue看完了smarty之后,想学习下框架,于是乎就选择了ThinkPHP,听说这个框架简单易用,另外还是国产的!所以kdchxue毫不犹豫的就选择了ThinkPHP 了!下面看看Thin ...

  8. 在Nginx服务器上安装SSL证书

    配置nginx 1.下载证书文件 2.在nginx的conf目录中创建目录cert目录,并将证书文件拷贝进去. 3.配置nginx.conf,完整的nginx.conf如下: #user nobody ...

  9. Java常用类StringBuffer详解

    内容多为最近学习的自我总结,可能有些地方写的不严谨,甚至会有错误的地方,仅供参考,如发现错误敬请指出,谢谢! 灰色字体为补充扩展内容,多为帮助自己理解. StringBuffer概述: 线程安全的可变 ...

  10. HeadFirst设计模式(一)策略者模式

    最近在看HeadFirst设计模式一书,作为一个半路出家的程序员,感觉很多东西需要学习,学习的路程中有些东西学了当时觉得理解了,但日常工作中没有使用到渐渐的自己就忘记了.--------------- ...