2020CCPC网络赛 Graph Theory Class (min_25素数筛 数论)
题目
http://acm.hdu.edu.cn/showproblem.php?pid=6889
题意
给你一个n个结点的完全图,结点从2~n+1标号,结点i和j之间的边权为lcm(i,j),问你这个图的最小生成树的边权和是多少
题解
对于一个合数,我们一定能找到它的因子,那么这个点和他的因子节点相连,那么权值就是合数本身。
对于一个质数,它和所有数的lcm最小值必然是和2相连得到的最小值,所以这个权值就是2*质数。
那么这个问题就可以转化为求2~n+1的合再加上所有质数的和,数字范围1e9。这里需要用到min_25素数筛。
Min25筛
使用条件
首先要弄清楚Min25筛具体用在什么地方,有什么使用条件。一般来说,它可以求大部分的积性函数的和,即形如:
∑ i = 1 n F ( i ) \large\sum_{i=1}^nF(i) ∑i=1nF(i)
要求的条件是F(x),x ∈ \in ∈ Prime要能够用多项式表示,而且F(xk),x ∈ \in ∈ Prime要能够快速计算。
大致思想
Min25筛的大致思想,就是把这个结果分为两个部分(准确来说是三个部分),一个是i为质数的和,一个是i为合数的和,再加上i为1的函数值。那么,我们首先看如果求这个 i i i为质数部分的和 a n s 1 ans1 ans1。我们不妨设:
g ( n , j ) = ∑ i = 1 n F ( i ) [ i ∈ P o r m i n ( p ) > P j , p ∣ i , p ∈ P ] \large g(n,j)=\sum_{i=1}^nF(i)[i\in P\ or \ min(p)>P_j,p|i,p\in P\ ] g(n,j)=∑i=1nF(i)[i∈P or min(p)>Pj,p∣i,p∈P ]
g ( n , j ) g(n,j) g(n,j)表示 n n n以内所有质数以及最小质因子 > P j >P_j >Pj的合数的 F F F之和。这样,显然有 a n s 1 ans1 ans1等于 g ( n , ∣ P ∣ ) g(n,|P|) g(n,∣P∣)。
这个东西的实际含义是什么呢?可以参考一下埃氏筛法的运行过程。
假设现在有n个数依次排开,第i个数是 f ( i ) f(i) f(i),根据埃氏筛法的那套理论,每次选出一个质数,然后筛掉它的所有倍数。
会发现 g ( n , j ) g(n,j) g(n,j)就是运行 j j j次埃氏筛法后,没被筛掉的所有数之和加上所有的 f ( p ) f(p) f(p)。
我们要求的 a n s 1 = ∑ i = 1 x [ i 是 质 数 ] f ( i ) ans1 = \sum_{i=1}^x[i是质数]f(i) ans1=∑i=1x[i是质数]f(i)其实就是 g ( x , ∣ P ∣ ) g(x,|P|) g(x,∣P∣),其中|P|是质数集合的大小。
那么我们考虑如何去计算这个 g ( n , j ) g(n,j) g(n,j)。
我们发现,当 P j 2 > n P_j^2>n Pj2>n时,最小质因子是 P j P_j Pj的最小合数就是 P j 2 P_j^2 Pj2,而 P j 2 > n P_j^2>n Pj2>n,所以此时有:
g ( n , j ) = g ( n , j − 1 ) g(n,j)=g(n,j-1) g(n,j)=g(n,