题解:洛谷P1891 疯狂LCM

原题链接

题目描述

描述:

众所周知,czmppppp是数学大神犇。一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了。。。

给定正整数N,求LCM(1,N)+LCM(2,N)+...+LCM(N,N)。

输入输出格式

输入格式:

第一行一个数T,表示有T组数据。

对于每组数据,一行,一个正整数N。

输出格式:

T行,每行为对应答案。

输入输出样例

输入样例#1: 复制
3125
输出样例#1: 复制
1455

说明

对于30%的数据,1≤T≤5,1≤N≤100000

对于100%的数据,1≤T≤300000,1≤N≤1000000

题解

挺妙的一道题。

要求的是\(\sum_{i=1}^{n}lcm(i, n)\),一看好像没什么思路(可能是本人菜)。当然只会想到暴力打表和看题解了……????

首先这步应该地球人都会去试:
\[\sum_{i=1}^{n}lcm(i, n) = n \sum_{i=1}^{n}\frac{i}{\gcd(i, n)}\]
然后很关键的一步是像证明莫反一样添一个\(\sum\)(说一句废话),式子就变成了:
\[n\sum_{d\mid n}\sum_{i=1}^{n}\frac{i}{d}[d=\gcd(i, n)]\]
中括号里是一个类似布尔型的变量。

对于中括号里的式子,两边同除以\(d\)
\[n\sum_{d\mid n}\sum_{i=1}^{n}\frac{i}{d}[\gcd(\frac{i}{d}, \frac{n}{d}) = 1]\]
\(\frac{i}{d}\)变成\(i\),得到:
\[n\sum_{d\mid n}\sum_{i=1}^{\frac{n}{d}}i[\gcd(i, \frac{n}{d}) = 1]\]
\(d\)倒着枚举,我们就得到了酱紫的东西:
\[n\sum_{d\mid n}\sum_{i=1}^{d}i[\gcd(i,d) = 1]\]
然后我们来看\(\sum_{i=1}^{d}i[\gcd(i,d) = 1]\):与\(d\)互质的所有数之和。

如果是个数就好求了……

等等,个数?我们是否可以从个数出发?

想一想,对于\(\gcd(i, d) = 1\)\(\gcd(d-i, d)\)是什么?显然也是\(1\)

所以\(i\)是成对出现的(\(d=1\)除外)。

于是我们发现(当\(d \not= 1\)时):
\[\sum_{i=1}^{d}i[\gcd(i,d) = 1] = \frac{\varphi(d)}{2} d\]
\(O(n)\)预处理\(\varphi\),对于每次询问\(O(\sqrt{n})\)枚举\(d\)回答。

这种算法有点卡,注意能不开long long的地方就别开long long

猜你喜欢

转载自www.cnblogs.com/pfypfy/p/9184853.html
lcm