51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3
Posted autoint
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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|nd\\varphi(n)
\\]
暴力搞就行了。
1188 最大公约数之和 V2
给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和。
相当于计算这段程序(程序中的gcd(i,j)表示i与j的最大公约数):
G=0
for i=1 to N
for j=i+1 to N
G+=gcd(i,j)
输入
第1行:1个数T,表示后面用作输入测试的数的数量。(1 <= T <= 50000)
第2 - T + 1行:每行一个数N。(2 <= N <= 5000000)
输出
共T行,输出最大公约数之和。
输入样例
3
10
100
200000
输出样例
67
13015
143295493160
1237 最大公约数之和 V3
给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和。
相当于计算这段程序(程序中的gcd(i,j)表示i与j的最大公约数):
由于结果很大,输出Mod 1000000007的结果。
G=0
for i=1 to N
for j=1 to N
G = (G + gcd(i,j)) mod 1000000007;
输入
输入一个数N。(2 <= N <= 10^10)
输出
输出G Mod 1000000007的结果。
输入样例
100
输出样例
31080
可以看出来,T2,T3转化一下就只有数据范围不同。
题解
\\[
\\sum_i=1^n\\sum_j=1^n\\gcd(i,j)\\=\\sum_d=1^nd\\sum_i=1^\\lfloor\\frac nd\\rfloor\\sum_j=1^\\lfloor\\frac nd\\rfloor[\\gcd(i,j)=1]\\=\\sum_d=1^nd\\sum_i=1^\\lfloor\\frac nd\\rfloor\\sum_j=1^\\lfloor\\frac nd\\rfloor\\sum_d'|\\gcd(i,j)\\mu(d)\\=\\sum_d=1^nd\\sum_d'=1^\\lfloor\\frac nd\\rfloor\\mu(d')\\lfloor\\frac ndd'\\rfloor^2
\\]
整除分块两次,区别在于第二次。
- V2可以直接线性筛求出\\(\\mu\\)前缀和。
- V3必须使用杜教筛,让\\(\\mu * I\\)即可。
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\\fraci*ngcd(i,n)\\)
先枚举\\(d=\\gcd(i,n)\\),然后化简得到
\\[
n*\\sum_d|n\\sum_i=1^\\fracndi[\\gcd(i,\\fracnd)=1]
\\]
相当于求\\(1\\)到\\(n-1\\)中,与\\(n\\)互质的数和,设\\(y<x\\),如果\\(\\gcd(y,x)=1\\),那么\\(\\gcd(x-y,x)=1\\),两式的贡献就是\\(x\\)了
所以\\(1\\)到\\(n-1\\)中,与\\(n\\)互质的数和为\\(\\frac\\phi(n)*n2\\),特殊的,如果\\(n=1,2\\),则和为\\(1\\)
那么原式就等于
\\[
n*\\sum_d|n且d不为n\\frac\\fracnd*\\phi(\\fracnd)2+1
\\]
再化简得到
\\[
n+\\fracn2\\sum_d|n且d>1d*phi(d)
\\]
这样,这个式子就变成\\(O(\\sqrtn)\\),但是多组数据仍会超时
实际上我们将\\(n\\)质因数分解得到\\(n=\\prod_i=1^xp[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^x1+\\sum_j=1^a[i](p[i]-1)*p[i]^2j-1
\\]
再根据等比数列求和公式得到
\\[
n+\\prod_i=1^x1+(p[i]-1)*\\fracp[i]^2*a[i]+1-p[i]p[i]^2-1\\=n+\\prod_i=1^x1+\\fracp[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 \\textrmlcm(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\\rceili*[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'\\rceili \\= 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 = \\prodp_i^q_i\\),那么
\\[
\\sum_d | T μ(d) * d = \\prod1-p_i
\\]
1238 最小公倍数之和 V3
出一个数N,输出小于等于N的所有数,两两之间的最小公倍数之和。
相当于计算这段程序(程序中的lcm(i,j)表示i与j的最小公倍数):
由于结果很大,输出Mod 1000000007的结果。
G=0
for i=1 to N
for j=1 to N
G = (G + lcm(i,j)) mod 1000000007;
输入
输入一个数N。(2 <= N <= 10^10)
输出
输出G Mod 1000000007的结果。
输入样例
4
输出样例
72
题解
\\[
\\sum_i=1^n\\sum_j=1^n\\textrmlcm(i,j)=\\sum_i=1^n\\sum_j=1^n\\fracij\\gcd(i,j)\\=\\sum_d=1^nd\\sum_i=1^\\lfloor\\frac nd\\rfloor\\sum_j=1^\\lfloor\\frac nd\\rfloorij[\\gcd(i,j)=1]\\=\\sum_d=1^nd\\sum_i=1^\\lfloor\\frac nd\\rfloor\\sum_j=1^\\lfloor\\frac nd\\rfloorij\\sum_d'|\\gcd(i,j)\\mu(d)\\=\\sum_d=1^nd\\sum_d'=1^\\lfloor\\frac nd\\rfloor\\mu(d')(d')^2\\left(\\sum_i=1^\\lfloor\\frac ndd'\\rfloori\\right)^2
\\]
然后就变成了LG3768 简单的数学题,外面多套了一个整除分块,不过不影响复杂度。(毒瘤)
以上是关于51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3的主要内容,如果未能解决你的问题,请参考以下文章