题目链接
题意是给出n的哈斯图,求 ∑ i ∑ j d i s ( i , j ) \sum_i\sum_j dis(i,j) ∑i∑jdis(i,j), d i s ( i , j ) dis(i,j) dis(i,j)表示 i i i和 j j j的最短路径长度。(哈斯图为,如果 x ∣ y x|y x∣y则有一条 y − x y-x y−x的边,权值为 y / x y/x y/x)
解题思路:
官方题解的做法非常的简约和优雅,这里记录一下推了很久常数又大的纯min25筛做法。。
我们让 f ( i ) f(i) f(i)表示 i i i的所有 质因数 ∗ * ∗指数 的和。
例如 f ( 12 ) = 2 ∗ 2 + 3 , f ( 48 ) = 2 ∗ 4 + 3 f(12) = 2*2+3, f(48) = 2*4+3 f(12)=2∗2+3,f(48)=2∗4+3
显然 f ( i ) f(i) f(i)表示 i i i到1的最短距离
那么有
a n s = ∑ i = 1 n ∑ j = 1 n f ( i / g c d ( i , j ) ) + f ( j / g c d ( i , j ) ) ans = \sum_{i=1}^{n}\sum_{j=1}^{n}f(i/gcd(i,j))+f(j/gcd(i,j)) ans=i=1∑nj=1∑nf(i/gcd(i,j))+f(j/gcd(i,j))
也就是说, i i i到 j j j的最短距离 = i i i到 g c d gcd gcd的最短距离+ g c d gcd gcd到j的最短距离
由 f f f的定义有
f ( i / g c d ) = f ( i ) − f ( g c d ) f(i/gcd)=f(i)-f(gcd) f(i/gcd)=f(i)−f(gcd)
所以 a n s = ∑ i = 1 n ∑ j = 1 n ( f ( i ) + f ( j ) ) − 2 ∑ i = 1 n ∑ j = 1 n f ( g c d ( i , j ) ) ans = \sum_{i=1}^{n}\sum_{j=1}^{n}(f(i)+f(j))- 2\sum_{i=1}^{n}\sum_{j=1}^{n} f(gcd(i,j)) <