51 NOD 1238 最小公倍数之和 V3

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1238

最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊!

然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧……

(然而并不会用什么公式编辑器,凑合着看吧……

 Σ(1<=i<=n) Σ(1<=j<=n) i*j/gcd(i,j)

=Σ(1<=d<=n) d * Σ(1<=i<=[n/d]) Σ(1<=j<=[n/d]) i*j*[gcd(i,j)==1]

=Σ(1<=d<=n) d * Σ(1<=d‘<=[n/d])  f([n/d/d‘])*d‘^2*mui(d‘)

=Σ(1<=d‘<=n) d‘^2*mui(d‘) Σ(1<=d<=[n/d‘])  d*f([n/d/d‘])

这里f(x)=(x*(x+1)/2)^2,即1到x中数字之间两两乘积之和。

可以看出不同的[n/d‘]只有根号n个,对于某一个[n/d‘],不同的[n/d/d‘]也只有根号n个,那么把它们压在一起处理就好了。

但是要做到这一点需要快速求出d‘^2*mui(d‘)的前缀和,这时就要用上杜教筛了。

记g(x)=x^2*mui(x),S(x)=Σ(1<=i<=x) g(i)

那么Σ(1<=i<=n) Σ (x|i) g(x)*(n/x)^2=Σ(1<=i<=n) Σ(x|i) mui(x)=Σ(1<=i<=n) [i==1] = 1

同时Σ(1<=i<=n) Σ (x|i) g(x)*(n/x)^2=Σ(1<=i<=n) Σ(1<=x<=[n/i]) g(x)*i^2= Σ(1<=i<=n) i^2*S[n/i]

可以得到S(n)=1-Σ(2<=i<=n) i^2*S[n/i],预处理+哈希维护一波就行了

但是不知道是我常数太大,还是方法没别人优越,卡了很久常数才卡过去。

代码自己码啦!

时间: 2024-08-06 11:55:31

51 NOD 1238 最小公倍数之和 V3的相关文章

【51nod】1238 最小公倍数之和 V3

[题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解] $ans=\sum_{i=1}^{n}\sum_{j=1}^{i}lcm(i,j)$ 令$g(n)=\sum_{i=1}\frac{n*i}{(n,i)}$,则要求g(n)的前缀和. $g(n)=n\sum_{d|n}\sum_{i=1}^{n}\frac{i}{d}[(n,i)=d]$ $g(n)=n\sum_{d|n}\sum_{i=1}^{n/d}i[(n/d,i)=1]$ $g(n

51nod1238 最小公倍数之和 V3

n<=1e10,求1<=i<=n,1<=j<=n,lcm(i,j)的和. 又是充满坎坷的简单题... Wait a minute 先打个miu和phi的表,以及一个暴力,随时检查式子! 来吧! $\sum_{i=1}^{n}\sum_{j=1}^{n}[i,j]$ $=\sum_{i=1}^{n}\sum_{j=1}^{n}ij(i,j)^{-1}$ $=\sum_{d=1}^{n}d^{-1}\sum_{i=1}^{n}\sum_{j=1}^{n}ij[(i,j)=d]$

51nod1238. 最小公倍数之和 V3(莫比乌斯反演)

题目链接 https://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题解 本来想做个杜教筛板子题结果用另一种方法过了...... 所谓的"另一种方法"用到的技巧还是挺不错的,因此这里简单介绍一下. 首先还是基本的推式子: \[\begin{aligned}\sum_{i = 1}^n \sum_{j = 1}^n {\rm lcm}(i, j) &= \sum_{i = 1}^n \sum_{j = 1}^n \

51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛

题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:因为是用的莫比乌斯函数求的,所以推导比大部分题解多...而且我写式子一般都比较详细,所以可能看上去很多式子,实际上是因为每一步都写了,几乎没有跳过的.所以应该都可以看懂的. 末尾的\(e\)函数是指的\(e[1] = 1\),\(e[x] = 0(x != 1)\)这样一个函数 \[\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\] \[\sum_{i

【学术篇】51nod 1238 最小公倍数之和

这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \=\sum_{i=1}^n\sum_{j=1}^n\frac{ij}{gcd(i,j)} \=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{ij}k[gcd(i,j)=k] \=\sum_{k=1}

[51nod1238] 最小公倍数之和 V3(杜教筛)

题面 传送门 题解 懒了--这里写得挺好的-- //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define IT map<ll,int>::iterator #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(

51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3

1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 输入 1个数N(N <= 10^9) 输出 公约数之和 输入样例 6 输出样例 15 题解 \[ \sum_{i=1}^n\gcd(i,n)=\sum_{d|n}d\varphi(n) \] 暴力搞就行了. 1188 最大公约数之和 V2 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和. 相当于计

51 nod 1188 最大公约数之和 V2

1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和. 相当于计算这段程序(程序中的gcd(i,j)表示i与j的最大公约数): G=0; for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } Input 第1行:1个数T,表示后面用作输入测试的数的数量.(1 <= T <= 5000

51 nod 1405 树的距离之和

1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input 第一行包含一个正整数n (n <= 100000),表示节点个数. 后面(n - 1)行,每行两个整数表示树的边. Output 每行一个整数,第i(i = 1,2,...n)行表示所有节点到第i个点的距离之和. Input示例 4 1 2 3 2 4 2 Output示例 5 3 5