51nod - 1363 - 最小公倍数之和 - 数论

https://www.51nod.com/Challenge/Problem.html#!#problemId=1363
求\(\sum\limits_{i=1}^{n}lcm(i,n)\)



先换成gcd:
\(\sum\limits_{i=1}^{n}\frac{i*n}{gcd(i,n)}\)

显而易见,枚举g:
$ n * \sum\limits_{g|n} \frac{1}{g} \sum\limits_{i=1}^{n} i*[gcd(i,n)==g] $

提g,没有下整符号:
$ n * \sum\limits_{g|n} \frac{1}{g} \sum\limits_{i=1}^{\frac{n}{g}} i*[gcd(i,\frac{n}{g})==1] $



考虑子问题:
$\sum\limits_{i=1}^{n} i*[gcd(i,n)==1] $

也就是n以内和n互质的数的和。
显然可以枚举因数d把他们减掉:
$\sum\limits_{i=1}^{n} i + \sum\limits_{d|n,d!=1}\mu(d)(d+2d+3d+...+n) $

显然前面那堆等于 \(d==1\) 的结果。
$\sum\limits_{d|n}\mu(d)(d+2d+3d+...+n) $

比如求36的互质数的和时,6在枚举2和枚举3的时候算重,要加回去,4在枚举2的时候算过,不用算。
化简:
$ \sum\limits_{d|n}\mu(d)d(1+2+3+...+\frac{n}{d}) $
$\sum\limits_{d|n}\mu(d)d\frac{(1+\frac{n}{d})*\frac{n}{d}}{2} $

即:
$\frac{n}{2}\sum\limits_{d|n}\mu(d)(1+\frac{n}{d}) $
里面分配率:
$\frac{n}{2}(\sum\limits_{d|n}\mu(d)+\sum\limits_{d|n}\mu(d)\frac{n}{d}) $

然后一换:
\(\frac{n}{2}([n==1]+\varphi(n) )\)

求这个东西的复杂度很显然,预处理因子的欧拉函数是根号的,求单个n的欧拉函数也是根号的,所以整个式子就是根号的。

记这个子问题为 \(p(n)=\sum\limits_{i=1}^{n} i*[gcd(i,n)==1] = \frac{n}{2}([n==1]+\varphi(n) )\),求解它的复杂度就来源于欧拉函数



回到$ n * \sum\limits_{g|n} \frac{1}{g} p(\frac{n}{g}) $

非常明显根号以内的欧拉函数可以重复利用,然后单独求一个最大的。

总体复杂度是根号的。理论上根号是过不了的,1.7e8左右,但是看别人搞什么质因数分解?这个不也是最坏根号的吗?我觉得他们能行我也能行。

原文地址:https://www.cnblogs.com/Yinku/p/10987912.html

时间: 2024-10-19 19:04:25

51nod - 1363 - 最小公倍数之和 - 数论的相关文章

1363 最小公倍数之和

1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000000007的结果. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 50000) 第2 - T + 1行:T个数A[i](A[i] <= 10^9)

51nod 1363 最小公倍数的和 欧拉函数+二进制枚举

1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000000007的结果. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 50000) 第2 - T + 1行:T个数A[i](A[i] <

BZOJ 1363 最小公倍数之和

Description 求\(\sum_{i=1}^n[i,n],n\leqslant 10^9,T\leqslant 5\times 10^4\) Solution 数论+欧拉函数... 破题有毒... 推导和BZOJ 2226: [Spoj 5971] LCMSum一样... 但是需要枚举所有约数,同时统计一下\(\varphi\)... Code #include <bits/stdc++.h> using namespace std; typedef long long ll; con

【学术篇】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}

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的所有数,两两之间的最大公约数之和. 相当于计

[2016-05-09][51nod][1012 最小公倍数LCM]

时间:2016-05-09 18:53:56 星期一 题目编号:[2016-05-09][51nod][1012 最小公倍数LCM] 题目大意:求a和b的最小公倍数 #include<cstdio> using namespace std; typedef long long ll; ll gcd(ll a,ll b){ return b == 0 ? a : gcd(b ,a%b); } ll lcm(ll a,ll b){ return a / gcd(a,b) * b; } int ma

BNU 12846 LCM Extreme 最小公倍数之和(线性欧拉筛选+递推)

LCM Extreme Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ID: 596464-bit integer IO format: %lld      Java class name: Main Find the result of the following code:unsigned long long allPairLcm(int n){ unsig

【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

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&