51Nod1363,1190 最小公倍数之和V1,V2

1363 最小公倍数之和

1.5 秒 131,072.0 KB 160 分 6 级题
给出一个n,求1-n这n个数,同n的最小公倍数的和。
例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66。
由于结果很大,输出Mod 1000000007的结果。

输入

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 50000)
第2 - T + 1行:T个数Ai

输出

共T行,输出对应的最小公倍数之和

输入样例

3
5
6
9

输出样例

55
66
279



这题跟 SPOJ LCMsum是一样的,只不过数据范围不一样,所以推到后面的操作不一样。

Star_Feel的题解

原题相当于求\(\sum_{i=1}^{n}\frac{i*n}{gcd(i,n)}\)

先枚举\(d=\gcd(i,n)\),然后化简得到
\[ n*\sum_{d|n}\sum_{i=1}^{\frac{n}{d}}i[\gcd(i,\frac{n}{d})=1] \]
相当于求\(1\)\(n-1\)中,与\(n\)互质的数和,设\(y<x\),如果\(\gcd(y,x)=1\),那么\(\gcd(x-y,x)=1\),两式的贡献就是\(x\)

所以\(1\)\(n-1\)中,与\(n\)互质的数和为\(\frac{\phi(n)*n}{2}\),特殊的,如果\(n=1,2\),则和为\(1\)

那么原式就等于
\[ n*\sum_{d|n且d不为n}\frac{\frac{n}{d}*\phi(\frac{n}{d})}{2}+1 \]
再化简得到
\[ n+\frac{n}{2}\sum_{d|n且d>1}d*phi(d) \]
这样,这个式子就变成\(O(\sqrt{n})\),但是多组数据仍会超时

实际上我们将\(n\)质因数分解得到\(n=\prod_{i=1}^{x}p[i]^a[i]\)

因为\(p[i]\)两两互质,所以可以转化为
\[ n+\prod_{i=1}^{x}\sum_{j=0}^{a[i]}\phi(p[i]^j)*p[i]^j \]
根据欧拉函数的性质可以得到
\[ n+\prod_{i=1}^{x}1+\sum_{j=1}^{a[i]}(p[i]-1)*p[i]^{2j-1} \]
再根据等比数列求和公式得到
\[ n+\prod_{i=1}^{x}1+(p[i]-1)*\frac{p[i]^{2*a[i]+1}-p[i]}{p[i]^2-1}\\ =n+\prod_{i=1}^{x}1+\frac{p[i]^{2*a[i]+1}-p[i]}{p[i]+1} \]
然后线筛素数加速质因数分解就可以过了,记得最后处理\(1,2\)的情况

1190 最小公倍数之和 V2

给出2个数a, b,求LCM(a,b) + LCM(a+1,b) + .. + LCM(b,b)。
例如:a = 1, b = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66。
由于结果可能很大,输出Mod 10^9 + 7的结果。(测试数据为随机数据,没有构造特别坑人的Test)

输入

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 50000)
第2 - T + 1行:每行2个数a, b,中间用空格分隔(1 <= a <= b <= 10^9)

输出

共T行,输出对应的最小公倍数之和Mod 10^9 + 7的结果。

输入样例

3
1 6
10 15
41 90

输出样例

66
675
139860

Cold_Chair的题解

\[ ans = \sum_{i = a}^b \textrm{lcm}(i) \\ = b*\sum_{d | b} \sum_{i = \lfloor{ {a} \over {d}}\rfloor}^{\lceil{ {b} \over {d}}\rceil} i * [\gcd(i, { {b} \over {d}}) = 1] \\ = b*\sum_{d | b} \sum_{i = \lfloor{ {a} \over {d}}\rfloor}^{\lceil{ {b} \over {d}}\rceil} i * \sum_{d' | \gcd(i, { {b} \over {d}})} μ(d') \\ = b*\sum_{d | b} \sum_{d' | { {b} \over {d}}} μ(d') * d' * \sum_{i = \lfloor{ {b} \over {d }}\rfloor}^{\lceil{ {a} \over {d}}\rceil}i*[d' | i] \\ = b*\sum_{d | b} \sum_{d' | { {b} \over {d}}} μ(d') * d' * \sum_{i = \lfloor{ {b} \over {d*d' }}\rfloor}^{\lceil{ {a} \over {d * d'}}\rceil}i \\ = b*\sum_{d | b} \sum_{d' | { {b} \over {d}}} μ(d') * d' * (\lfloor{ {b} \over {d*d' }}\rfloor - \lceil{ {a} \over {d * d'}}\rceil + 1) * (\lfloor{ {b} \over {d*d' }}\rfloor + \lceil{ {a} \over {d * d'}}\rceil) / 2 \]

设$T = d * d’ $
\[ = b*\sum_{T | b}(\lfloor{ {b} \over {T}}\rfloor - \lceil{ {a} \over {T}}\rceil + 1) * (\lfloor{ {b} \over {T}}\rfloor + \lceil{ {a} \over {T}}\rceil) / 2 * \sum_{d | T} μ(d) * d \]
我们观察一下$\sum_{d | T} μ(d) * d $
狄利克雷卷积做了这么多,轻松可得:
\(T = \prod{p_i^{q_i}}\),那么
\[ \sum_{d | T} μ(d) * d = \prod{1-p_i} \]

猜你喜欢

转载自www.cnblogs.com/autoint/p/11104435.html
今日推荐