51 NOD 1227 平均最小公倍数(杜教筛)

1227 平均最小公倍数

推式子

S(n)=∑i=1n∑j=1ilcm(i,j)i=∑i=1n∑j=1iijigcd(i,j)=∑i=1n∑j=1ijgcd(i,j)=∑i=1n∑d=1i∑j=1ijd(gcd(i,j)==d)=∑i=1n∑d=1i∑j=1idj(gcd(j,id)==1)=∑i=1n∑d=1iidϕ(id)+(id==1)2=∑d=1n∑i=1ndiϕ(i)+(i==1)2接下来就是杜教筛求∑i=1niϕ(i)了,g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2nf(i)S(ni)另f(i)=i,即可求得S(n)=∑i=1ni2−∑i=2niS(nd)S(n) = \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} \frac{lcm(i, j)}{i}\\ = \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} \frac{ij}{igcd(i, j)}\\ = \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} \frac{j}{gcd(i, j)}\\ = \sum_{i = 1} ^{n} \sum_{d = 1} ^{i} \sum_{j = 1} ^{i} \frac{j}{d} (gcd(i, j) == d)\\ = \sum_{i = 1} ^{n} \sum_{d = 1} ^{i} \sum_{j = 1} ^{\frac{i}{d}}j(gcd(j, \frac{i}{d}) == 1)\\ = \sum_{i = 1} ^{n} \sum_{d = 1} ^{i} \frac{\frac{i}{d} \phi(\frac{i}{d}) + (\frac{i}{d} == 1)}{2}\\ = \sum_{d = 1} ^{n} \sum_{i = 1} ^{\frac{n}{d}} \frac{i \phi(i) + (i == 1)}{2} \\ 接下来就是杜教筛求\sum_{i = 1} ^{n}i \phi(i) 了,g(1)S(n) = \sum_{i = 1} ^{n} (f * g)(i) - \sum_{i = 2} ^{n} f(i) S(\frac{n}{i})\\ 另f(i) = i,即可求得S(n) = \sum_{i = 1} ^{n} i ^ 2 - \sum_{i = 2} ^{n}iS(\frac{n}{d})\\ S(n)=i=1nj=1iilcm(i,j)=i=1nj=1iigcd(i,j)ij=i=1nj=1igcd(i,j)j=i=1nd=1ij=1idj(gcd(i,j)==d)=i=1nd=1ij=1dij(gcd(j,di)==1)=i=1nd=1i2diϕ(di)+(di==1)=d=1ni=1dn2iϕ(i)+(i==1)i=1niϕ(i)g(1)S(n)=i=1n(fg)(i)i=2nf(i)S(in)f(i)=iS(n)=i=1ni2i=2niS(dn)

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e6 + 10, mod = 1e9 + 7;int prime[N], cnt;ll phi[N], inv2, inv6;bool st[N];ll quick_pow(ll a, ll n, ll mod) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans;
}void init() {phi[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;phi[i] = i - 1;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}for(int i = 1; i < N; i++) {phi[i] = (1ll * phi[i] * i + phi[i - 1]) % mod;}inv2 = quick_pow(2, mod - 2, mod), inv6 = quick_pow(6, mod - 2, mod);
}unordered_map<ll, ll> ans_s;ll S(ll n) {if(n < N) return phi[n];if(ans_s.count(n)) return ans_s[n];ll ans = n * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod;for(ll l = 2, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans - (l + r) * (r - l + 1) / 2 % mod * S(n / l) % mod + mod) % mod;}return ans_s[n] = ans;
}ll solve(ll n) {ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans + 1ll * (r - l + 1) * S(n / l) % mod) % mod;}return (ans + n) % mod;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();ll l = read(), r = read();printf("%lld\n", ((solve(r) - solve(l - 1)) % mod * inv2 % mod + mod) % mod);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BZOJ3512】DZY Loves Math IV(杜教筛)

【BZOJ3512】DZY Loves Math IV&#xff08;杜教筛&#xff09; https://www.cnblogs.com/cjyyb/p/10165338.html

.NET Core很酷,你不得不知

我一直回想我的第一篇博文&#xff0c;那是关于多个服务的服务器平台的详细教程&#xff0c;它使用 GitLab CI 在 AWS 上&#xff0c;当时使用单个命令行进行部署&#xff0c; 至今回想&#xff0c;令人感觉很酷。前几天&#xff0c;我偶然听说一些软件公司的 HR 在招聘原则上拒…

51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)

1363 最小公倍数之和 推式子 ∑i1nlcm(i,n)n∑i1nigcd(i,n)n∑d∣n∑i1nid(gcd(i,n)d)n∑d∣n∑i1ndi(gcd(i,nd)1)n∑d∣ndϕ(d)(d1)2\sum_{i 1} ^{n} lcm(i, n)\\ n\sum_{i 1} ^{n} \frac{i}{gcd(i, n)}\\ n \sum_{d \mid n} \sum_{i 1} ^{n} \frac{i}{d}(gcd(i, n) d)…

【BZOJ3930】选数(莫比乌斯反演倍数形式,杜教筛)

【BZOJ3930】选数 https://www.cnblogs.com/cjyyb/p/8303813.html

程序员修神之路--高并发系统设计负载均衡架构

点击上方“蓝字”关注&#xff0c;酷爽一夏菜菜哥&#xff0c;上次你给我讲的分库分表策略对我帮助很大有帮助就好&#xff0c;上次请我的咖啡也很好喝~呵呵&#xff0c;不过随着访问量的不断加大&#xff0c;网站我又加了nginx做负载均衡好呀&#xff0c;看来要进阶高级工程师…

类欧几里得算法详细推导过程(附带模板)

类欧几里得算法推导 初识 给出三种形式&#xff1a; f(a,b,c,n)∑i0n⌊aibc⌋f(a, b, c, n) \sum_{i 0} ^{n} \lfloor\frac{ai b}{c}\rfloorf(a,b,c,n)∑i0n​⌊caib​⌋g(a,b,c,n)∑i0ni⌊aibc⌋g(a, b, c, n) \sum_{i 0} ^{n}i \lfloor \frac{ai b}{c}\rfloorg(a,b,c…

【Luogu3768】简单的数学题(莫比乌斯反演/杜教筛/欧拉函数)

【Luogu3768】简单的数学题 https://www.cnblogs.com/cjyyb/p/8298339.html

【学习笔记】Docker - 01. Docker是啥

我只是把之前的学习笔记整理一下&#xff0c;贴到这里&#xff0c;可能会显得比较凌乱。。。1.1 啥是Docker?Docker 是一个开源项目&#xff0c;它被用来做构建、打包和运行程序。它是一个命令行程序&#xff0c;一个后台进程&#xff0c;也是一组使用逻辑方法来解决常见软件问…

使用 .NET CORE 创建 项目模板,模板项目,Template

场景&#xff1a;日常工作中&#xff0c;你可能会碰到需要新建一个全新的解决方案的情况&#xff08;如公司新起了一个新项目&#xff0c;需要有全新配套的后台程序&#xff09;&#xff0c;如果公司内部基础框架较多、解决方案需要DDD模式等&#xff0c;那么从新起项目到各种依…

【BZOJ4916】神犇和蒟蒻(杜教筛)

【BZOJ4916】神犇和蒟蒻&#xff08;杜教筛&#xff09; https://www.cnblogs.com/cjyyb/p/8297338.html 杜教筛技巧

E. Number Challenge

E. Number Challenge 推式子 ∑i1a∑j1b∑k1cσ(ijk)∑i1a∑j1b∑k1c∑x∣i∑y∣j∑z∣k(gcd(x,y)1)(gcd(x,z)1)(gcd(y,z)1)∑x1a∑y1b∑z1c⌊ax⌋⌊by⌋⌊cz⌋(gcd(x,y)1)(gcd(x,z)1)(gcd(y,z)1)∑d1aμ(d)∑x1⌊ad⌋⌊adx⌋∑y1⌊bd⌋⌊bdy⌋∑z1c⌊cd⌋(gcd(x,z)1)(gcd(y,z…

时间表(日记)

2021/1/14 今天白天学习还算成功&#xff0c;但是晚饭后拿起手机就开始颓废了&#xff0c;特别是因为听相声实在是无聊而且低俗&#xff0c;所以又忍不住诱惑下载了b站&#xff0c;相比于相声b站的确是有营养的多&#xff0c;但是一旦激起了我的好奇心&#xff0c;尤其是吸引了…

谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

一、前言surging是基于.NET CORE 服务引擎。初始版本诞生于2017年6月份&#xff0c;经过NCC社区二年的孵化&#xff0c;2.0版本将在2019年08月28日进行发布&#xff0c;经历二年的发展&#xff0c;已经全部攘括了微服务架构的技术栈&#xff0c;覆盖了从服务注册、服务发现、中…

2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)

K Sum 推式子 Fn(k)∑l11n∑l21n⋯∑lk1n(gcd(l1,l2,…,lk))2∑d1nd2∑l11nd∑l21nd⋯∑lk1nd(gcd(l1,l2,…,lk)1)∑d1nd2∑l11nd∑l21nd⋯∑lk1nd∑t∣gcd(l1,l2,…,lk)μ(t)∑d1nd2∑t1ndμ(t)(ntd)2另Ttd∑T1n(nT)k∑d∣Td2μ(Td)∑i2nFn(i)∑T1n∑i2k(nT)i∑d∣Td2μ(Td)到…

【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)

【BZOJ4028】[HEOI2015]公约数数列 https://www.luogu.com.cn/problem/P4108 求解最靠前的一个位置前缀gcd和前缀异或的乘积恰好等于x&#xff0c;并且要求支持单点修改 首先我们可以发现这个问题没法使用线段树维护&#xff0c;因为不仅前缀没有单调性&#xff0c;而且修改也…

GuGuFishtion(2018 Multi-University Training Contest 7)

GuGuFishtion 推式子 ∑a1m∑b1nϕ(a,b)ϕ(a)ϕ(b)∑a1m∑b1ngcd(a,b)ϕ(gcd(a,b))∑d1mdϕ(d)∑a1md∑b1mdgcd(a,b)1∑d1mdϕ(d)∑a1md∑b1md∑k∣gcd(a,b)μ(k)我们约定n,m&#xff0c;满足n<m∑d1ndϕ(d)∑k1ndμ(k)⌊nkd⌋⌊mkd⌋\sum_{a 1 } ^{m} \sum_{b 1 } ^{n} …

奇淫巧技-Flutter调用C#

前言众所周知&#xff0c;Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态&#xff0c;后被微软收购后开源。但似乎有个现象&#xff0c;开源后的Xamarin发展似乎有些停滞&#xff0c;而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引擎…

【UOJ#33】【UR #2】树上GCD(长链剖分/根号分类讨论)

【UOJ#33】【UR #2】树上GCD 求解树上两个点到lca的距离的最大公约数是k的对数 首先我们很容易就想到莫比乌斯反演&#xff0c;那么利用倍数形式&#xff0c;我们只需要求解是i的倍数的对数。 考虑枚举lca&#xff0c;这个问题就和深度有关&#xff0c;那么可以长链剖分&…

.NET World——gPRC概览

官方的定义&#xff1a;gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authen…

51NOD 1220 约数之和(杜教筛)

1220 约数之和 推式子 ∑i1n∑j1nd(i,j)∑i1n∑j1n∑x∣i∑y∣j(gcd(x,y)1)xjy∑d1ndμ(d)∑i1nd∑x∣iix∑j1nd∑y∣jj∑d1ndμ(d)(∑i1nd∑x∣ix)2∑d1ndμ(d)(∑x1nx∑x∣i)2∑d1ndμ(d)(∑x1nxnx)2接下来就是杜教筛求dμ(d)的前缀和&#xff0c;然后再直接分块求∑x1nxnx&…