题解:洛谷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

转载于:https://www.cnblogs.com/pfypfy/p/9184853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值