题目

设 \(\large A(n)=\frac{1}{n}\sum_{i=1}^n lcm(i,n)\),

求 \(\sum_{i=l}^rA(i)\),\(n\leq 10^9\)


分析

题意可以转化成求 \(\large \sum_{i=1}^n\frac{1}{i}\sum_{j=1}^i lcm(i,j)\)

首先把 \(lcm\) 弄掉就是 \(\large \sum_{i=1}^n\sum_{j=1}^i\frac{j}{\gcd(i,j)}\)

考虑枚举 \(\gcd(i,j)\) 那么再化简一下可以得到

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

设 \(\large f(n)=\sum_{i=1}^{n}j[\gcd(n,i)==1]\),那么 \(\large f(n)=\begin{cases}\frac{n\varphi(n)}{2}[n>1]\\1\end{cases}\)

那么原式进一步化简为 \(\large \frac{n}{2}+\frac{1}{2}\sum_{i=1}^n\sum_{d|i}d\varphi(d)\)

枚举 \(d\) 可以得到

\[\frac{n}{2}+\frac{1}{2}\sum_{d=1}^nd\varphi(d)\lfloor\frac{n}{d}\rfloor
\]

外层整除分块,然后里层卷一个 \(id\) 杜教筛就可以了


代码

#include <cstdio>
#include <unordered_map>
using namespace std;
const int N=10000011,mod=1000000007;
const long long i2=(mod+1)/2,i6=i2/3;
int f[N],prime[N],v[N],Cnt,A,B;
unordered_map<int,int>F;
int mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
void Pro(int n){
f[1]=v[1]=1;
for (int i=2;i<=n;++i){
if (!v[i]) prime[++Cnt]=v[i]=i,f[i]=i*(i-1ll)%mod;
for (int j=1;j<=Cnt&&prime[j]<=n/i;++j){
f[i*prime[j]]=1ll*f[i]*f[prime[j]]%mod,v[i*prime[j]]=1;
if (i%prime[j]==0){
f[i*prime[j]]=mo(f[i*prime[j]],1ll*f[i]*prime[j]%mod);
break;
}
}
}
for (int i=2;i<=n;++i) f[i]=mo(f[i],f[i-1]);
}
int phid(int n){
if (n<=N-11) return f[n];
if (F.find(n)!=F.end()) return F[n];
int ans=i6*n%mod*(n+1)%mod*(n<<1|1)%mod;
for (int l=2,r;l<=n;l=r+1)
r=n/(n/l),ans=mo(ans,mod-i2*(l+r)%mod*(r-l+1)%mod*phid(n/l)%mod);
return ans;
}
int answ(int n){
int ans=n,las=0;
for (int l=1,r,now;l<=n;l=r+1,las=now){
r=n/(n/l),now=phid(r);
ans=mo(ans,1ll*(now-las+mod)*(n/l)%mod);
}
return i2*ans%mod;
}
int main(){
Pro(N-11),scanf("%d%d",&A,&B);
return !printf("%d",mo(answ(B),mod-answ(A-1)));
}

#杜教筛,欧拉函数#51nod 1227 平均最小公倍数的更多相关文章

  1. 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)

    题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...

  2. luogu P3768 简单的数学题 杜教筛 + 欧拉反演 + 逆元

    求 $\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j)$   考虑欧拉反演: $\sum_{d|n}\varphi(d)=n$   $\Rightarrow \sum_{i ...

  3. 2019年南京网络赛E题K Sum(莫比乌斯反演+杜教筛+欧拉降幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 首先我们将原式化简: \[ \begin{aligned} &\sum\limits_{l_1=1}^{n}\sum\limits_{l_2 ...

  4. The Euler function(线性筛欧拉函数)

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  5. 51nod 1227 平均最小公倍数【欧拉函数+杜教筛】

    以后这种题能用phi的就不要用mu-mu往往会带着个ln然后被卡常致死 把题目要求转换为前缀和相减的形式,写出来大概是要求这样一个式子: \[ \sum_{i=1}^{n}\sum_{j=1}^{i} ...

  6. 51NOD 1227 平均最小公倍数 [杜教筛]

    1227 平均最小公倍数 题意:求\(\frac{1}{n} \sum_{i=1}^n lcm(n,i)\) 和的弱化版? \[ ans = \frac{1}{2}((\sum_{i=1}^n \su ...

  7. 素数的线性筛 && 欧拉函数

    O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ...

  8. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

  9. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

  10. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

随机推荐

  1. win32 - MultiByteToWideChar的示例

    该函数经常被用来处理UTF-8和ANSI格式的字符串,将它们转换为宽字节(UTF-16) #include <iostream> #include <Windows.h> #i ...

  2. Docker实践之06-访问仓库

    目录 什么是仓库 一.Docker Hub 注册 登录 拉取镜像 推送镜像 自动创建 二.私有仓库 Docker Registry 安装Docker Registry 在私有仓库上传/搜索/下载镜像 ...

  3. 如何配置WebStorm开发Chrome插件项目

    开发Chrome插件项目,在调用Chrome的相关接口时,默认情况下WebStorm是不会有任何提示的,这对于开发者特别是新手特别不友好. 因此,需要IDE能支持Chrome接口调用时的智能提示. 如 ...

  4. render_to_string快捷函数,渲染模板字符串

    # views.py from django.template.loader import render_to_string from django.http import HttpResponse ...

  5. django学习第七天---创建多表结构,创建第三张表的三种方式,创建模型类时的一些元信息配置,多表增加

    图书管理系统作业知识点整理 知识点1: print(request.POST.dict())#dict()方法能将QueryDict类型数据转换为普通字典类型数据 传数据时,可以用**{}打散的方式来 ...

  6. 在Study.BlazorOne项目中引入Study.Trade模块的实体的表结构

    # 1.修改EntityFrameworkCore项目下的BlazorOneDbContext文件,增加一行代码即可 增加Study.Trade.EntityFrameworkCore中的这个方法: ...

  7. Glide源码解析三(注册组件)

    转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12900387.html Glide源码解析一,初始化 Glide源码解析二-into方法 Glide源 ...

  8. C++//queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为

    1 //queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为 2 3 4 #include<iostream> 5 #include<queue> ...

  9. Go和TinyGo

    Go和TinyGo是两种不同的Go语言编译器,它们之间有以下几点区别: 目标平台: Go:Go语言编译器主要面向通用计算机平台,如Windows.Linux.macOS等. TinyGo:TinyGo ...

  10. Tomcat 系列

    Tomcat 系列 目录 Tomcat 系列 一. 基本概念 1.1 java jdk 概念 1.2 jsp.servlet是什么 1.3 web服务器.web容器.应用程序服务器 1.4 tomca ...