题解:洛谷P1891 疯狂LCM

原题链接

题目描述

描述:

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

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

输入输出格式

输入格式:

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

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

输出格式:

T行,每行为对应答案。

输入输出样例

输入样例#1: 复制
3
1
2
5
输出样例#1: 复制
1
4
55

说明

对于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

posted @ 2018-06-14 20:29  pfy_pfy  阅读(212)  评论(0编辑  收藏  举报