杜教筛和 min_25 筛基础习题

杜教筛和 min_25 筛基础习题

这篇博客记录了自己最近几个月所刷的数论函数题目,所以有些题目可能不需要用到杜教筛或者 min_25 筛。某些题需要一些乱搞的技巧。

感谢 tangjz 提供大量题目。

1. HDU - 5608 function

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5608

1.1 题意

定义:
n 2 − 3 n + 2 = ∑ d ∣ n f ( d ) n^2-3n+2=\sum_{d|n}f(d) n23n+2=dnf(d)
∑ i = 1 n f ( i ) m o d    1 0 9 + 7 \sum_{i=1}^n f(i) \mod 10^9+7 i=1nf(i)mod109+7 的值。

多组读入,共有 T ≤ 500 T \le 500 T500 组数据, n ≤ 1 0 9 n \le 10^9 n109,其中不超过 5 5 5 组数据满足 n > 1 0 6 n > 10^6 n>106

1.2 解题过程

我们可以发现, ∑ d ∣ n f ( d ) = f ∗ I \sum_{d|n}f(d)=f*I dnf(d)=fI,因此对于大于 1 0 6 10^6 106 的部分,可以使用杜教筛来求解,对于小于 1 0 6 10^6 106 的部分,可以暴力预处理出前缀和。

时间复杂度: O ( n log ⁡ n + n 2 3 ) O(n \log n + n^{\frac{2}{3}}) O(nlogn+n32)

2. 51Nod - 1238 最小公倍数之和 V3

题目链接:http://www.51nod.com/Challenge/Problem.html#problemid=1238

2.1 题意

给定 n ( 2 ≤ n ≤ 1 0 10 ) n(2 \le n \le 10^{10}) n(2n1010),求
∑ i = 1 n ∑ j = 1 n lcm ( i , j ) m o d    1 0 9 + 7 \sum_{i=1}^n \sum_{j=1}^n \text{lcm}(i,j) \mod 10^9+7 i=1nj=1nlcm(i,j)mod109+7
的值。

2.2 解题过程

∑ i = 1 n ∑ j = 1 n lcm ( i , j ) = ∑ k = 1 n k ∑ d = 1 ⌊ n k ⌋ μ ( d ) ⋅ d 2 ⌊ n k d ⌋ 2 , l = k d = ∑ l = 1 n ⌊ n l ⌋ 2 ∑ d ∣ l μ ( d ) ⋅ d 2 ⋅ l d \begin{aligned} \sum_{i=1}^n \sum_{j=1}^n \text{lcm}(i,j)&=\sum_{k=1}^n k \sum_{d=1}^{\lfloor \frac{n}{k} \rfloor} \mu(d) \cdot d^2 \lfloor \frac{n}{kd} \rfloor^2,l=kd \\ &=\sum_{l=1}^n \lfloor \frac{n}{l} \rfloor^2 \sum_{d|l} \mu(d) \cdot d^2 \cdot \frac{l}{d} \end{aligned} i=1nj=1nlcm(i,j)=k=1nkd=1knμ(d)d2kdn2,l=kd=l=1nln2dlμ(d)d2dl

f ( l ) = ∑ d ∣ l μ ( d ) ⋅ d 2 ⋅ l d f(l)=\sum_{d|l} \mu(d) \cdot d^2 \cdot \frac{l}{d} f(l)=dlμ(d)d2dl,则 f = ( μ ⋅ i d 2 ) ∗ i d f=(\mu \cdot id^2) * id f=(μid2)id,我们对 f f f 卷上一个 i d 2 id^2 id2,根据狄利克雷卷积的可交换性,可以得到
f ∗ i d 2 = ( μ ⋅ i d 2 ) ∗ i d 2 ∗ i d = ( ∑ d ∣ l μ ( d ) ⋅ d 2 ⋅ l 2 d 2 ) ∗ i d = ϵ ∗ i d = i d \begin{aligned} f * id^2&=(\mu \cdot id^2) * id^2 * id \\ &=(\sum_{d|l}\mu(d) \cdot d^2 \cdot \frac{l^2}{d^2})*id \\ &=\epsilon*id \\ &=id \end{aligned} fid2=(μid2)id2id=(dlμ(d)d2d2l2)id=ϵid=id
因此当 n ≤ 1670000 n \le 1670000 n1670000 时,使用线性筛预处理出 f f f 的前缀和,否则需要利用杜教筛计算 f f f 的前缀和,最后套一个数论分块即可解决本题。

需要注意的是,杜教筛外面套一个数论分块不影响总体的时间复杂度。

时间复杂度: O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)

3. 51Nod - 1227 平均最小公倍数

题目链接:http://www.51nod.com/Challenge/Problem.html#problemid=1227

3.1 题意

定义:
A ( n ) = ∑ i = 1 n lcm ( n , i ) n A(n)=\frac{\sum_{i=1}^n \text{lcm}(n,i)}{n} A(n)=ni=1nlcm(n,i)
,给定 a a a b ( 1 ≤ a ≤ b ≤ 1 0 9 ) b(1 \le a \le b \le 10^9) b(1ab109),求
∑ i = a b A ( i ) m o d    1 0 9 + 7 \sum_{i=a}^bA(i) \mod 10^9+7 i=abA(i)mod109+7
的值。

3.2 解题过程

A ( n ) = ∑ i = 1 n lcm ( n , i ) n = ∑ i = 1 n n i n ⋅ gcd ⁡ ( i , n ) = ∑ i = 1 n i gcd ⁡ ( i , n ) = ∑ k = 1 n ∑ i = 1 n i k [ gcd ⁡ ( i , n ) = k ] = ∑ k ∣ n ∑ i = 1 n k i [ gcd ⁡ ( n k , i ) = 1 ] = ∑ k ∣ n n k ⋅ φ ( n k ) + [ n k = 1 ] 2 = ( ∑ k ∣ n φ ( k ) ⋅ k ) + 1 2 \begin{aligned} A(n)&=\sum_{i=1}^n \frac{\text{lcm}(n,i)}{n}\\ &=\sum_{i=1}^n \frac{ni}{n\cdot \gcd(i,n)}\\ &=\sum_{i=1}^n \frac{i}{\gcd(i,n)}\\ &=\sum_{k=1}^n\sum_{i=1}^n \frac{i}{k}[\gcd(i,n)=k]\\ &=\sum_{k|n}\sum_{i=1}^{\frac{n}{k}}i[\gcd(\frac{n}{k},i)=1]\\ &=\sum_{k|n}\frac{\frac{n}{k}\cdot\varphi(\frac{n}{k})+[\frac{n}{k}=1]}{2}\\ &=\frac{(\sum_{k|n}\varphi(k)\cdot k)+1}{2} \end{aligned} A(n)=i=1nnlcm(n,i)=i=1nngcd(i,n)ni=i=1ngcd(i,n)i=k=1ni=1nki[gcd(i,n)=k]=kni=1kni[gcd(kn,i)=1]=kn2knφ(kn)+[kn=1]=2(knφ(k)k)+1

f ( n ) = ∑ k ∣ n φ ( k ) ⋅ k f(n)=\sum_{k|n}\varphi(k)\cdot k f(n)=knφ(k)k,则 n ≤ 1 0 6 n \le 10^6 n106 时,可以通过线性筛预处理出前缀和;

n > 1 0 6 n > 10^6 n>106 时,我们需要通过狄利克雷卷积 + 杜教筛处理出其前缀和。

可以发现, f = ( φ ⋅ i d ) ∗ I f=(\varphi \cdot id) * I f=(φid)I,我们尝试将 f f f 卷上 i d id id,则可以得到
f ∗ i d = ( φ ⋅ i d ) ∗ I ∗ i d = ( φ ⋅ i d ) ∗ i d ∗ I = i d 2 ∗ I = ∑ d ∣ n d 2 \begin{aligned} f*id&=(\varphi\cdot id)*I*id\\ &=(\varphi\cdot id)*id*I\\ &=id^2 * I\\ &=\sum_{d|n}d^2 \end{aligned} fid=(φid)Iid=(φid)idI=id2I=dnd2
根据杜教筛的时间复杂度,我们最多在 O ( n ) O(\sqrt n) O(n ) 以内的时间复杂度内求出 f ∗ i d f*id fid 的前缀和:
∑ i = 1 n ( f ∗ i d ) ( i ) = ∑ i = 1 n ∑ d ∣ i d 2 = ∑ d = 1 n d 2 ∑ i = 1 ⌊ n d ⌋ 1 = ∑ d = 1 n d 2 ⌊ n d ⌋ \begin{aligned} \sum_{i=1}^n (f*id)(i)&=\sum_{i=1}^n\sum_{d|i}d^2\\ &=\sum_{d=1}^n d^2\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} 1\\ &=\sum_{d=1}^n d^2 \lfloor \frac{n}{d} \rfloor \end{aligned} i=1n(fid)(i)=i=1ndid2=d=1nd2i=1dn1=d=1nd2dn
,至此,我们便可通过杜教筛求出 f ∗ i d f*id fid 后面项的前缀和,时间复杂度为 O ( n 2 3 ) O(n^\frac{2}{3}) O(n32)

4. 51Nod - 1222 最小公倍数计数

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1222

4.1 题意

定义 f ( n ) f(n) f(n) 为最小公倍数为 n n n 的二元组数量,给定 a , b ( 1 ≤ a ≤ b ≤ 1 0 11 ) a,b(1 \le a \le b \le 10^{11}) a,b(1ab1011),求
∑ i = a b f ( i ) \sum_{i=a}^b f(i) i=abf(i)
的值。

4.2 解题过程

我们只需考虑 F ( n ) = ∑ i = 1 n f ( i ) F(n)=\sum_{i=1}^n f(i) F(n)=i=1nf(i) 如何求出,即可通过 F ( b ) − F ( a − 1 ) F(b)-F(a-1) F(b)F(a1) 求出答案。
∑ i = 1 n f ( i ) = ∑ i = 1 n ∑ j = 1 n [ lcm ( i , j ) ≤ n ] = ∑ i = 1 n ∑ j = 1 n [ i j gcd ⁡ ( i , j ) ≤ n ] = ∑ k = 1 n ∑ i = 1 n ∑ j = 1 n [ i j k ≤ n ] [ gcd ⁡ ( i , j ) = k ] = ∑ k = 1 n ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ n k ⌋ [ i j k ≤ n ] [ gcd ⁡ ( i , j ) = 1 ] = ∑ k = 1 n ∑ d = 1 ⌊ n k ⌋ μ ( d ) ∑ i = 1 ⌊ n k d ⌋ ∑ j = 1 ⌊ n k d ⌋ [ i j k ≤ ⌊ n d 2 ⌋ ] = ∑ d = 1 n μ ( d ) ∑ k = 1 ⌊ n d 2 ⌋ ∑ i = 1 ⌊ n k d 2 ⌋ ∑ j = 1 ⌊ n i k d 2 ⌋ [ i j k ≤ ⌊ n d 2 ⌋ ] \begin{aligned} \sum_{i=1}^n f(i) &= \sum_{i=1}^n \sum_{j=1}^n [\text{lcm}(i,j) \le n]\\ &= \sum_{i=1}^n \sum_{j=1}^n [\frac{ij}{\gcd(i,j)} \le n]\\ &= \sum_{k=1}^n \sum_{i=1}^n \sum_{j=1}^n [\frac{ij}{k}\le n][\gcd(i,j)=k]\\ &= \sum_{k=1}^n \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{k} \rfloor} [ijk\le n][\gcd(i,j)=1]\\ &= \sum_{k=1}^{n} \sum_{d=1}^{\lfloor \frac{n}{k} \rfloor} \mu(d) \sum_{i=1}^{\lfloor \frac{n}{kd} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{kd} \rfloor} [ijk \le \lfloor \frac{n}{d^2} \rfloor]\\ &= \sum_{d=1}^{\sqrt n} \mu(d) \sum_{k=1}^{\lfloor \frac{n}{d^2} \rfloor} \sum_{i=1}^{\lfloor \frac{n}{kd^2} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{ikd^2} \rfloor} [ijk \le \lfloor \frac{n}{d^2} \rfloor] \end{aligned} i=1nf(i)=i=1nj=1n[lcm(i,j)n]=i=1nj=1n[gcd(i,j)ijn]=k=1ni=1nj=1n[kijn][gcd(i,j)=k]=k=1ni=1knj=1kn[ijkn][gcd(i,j)=1]=k=1nd=1knμ(d)i=1kdnj=1kdn[ijkd2n]=d=1n μ(d)k=1d2ni=1kd2nj=1ikd2n[ijkd2n]
g ( n ) = ∑ k = 1 n ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ n i k ⌋ [ i j k ≤ n ] g(n)=\sum_{k=1}^{n} \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{ik} \rfloor} [ijk \le n] g(n)=k=1ni=1knj=1ikn[ijkn],则我们可以通过枚举 k , i , j k,i,j k,i,j 来在 T 1 ( n ) = O ( ∑ i = 1 n 1 3 ( n i − i ) ) = O ( n 2 3 ) T_1(n)=O(\sum_{i=1}^{n^{\frac{1}{3}}}(\sqrt{\frac{n}{i}}-i))=O(n^{\frac{2}{3}}) T1(n)=O(i=1n31(in i))=O(n32) 的时间复杂度内求出 g ( n ) g(n) g(n)。枚举时,假设 k ≤ i ≤ j k \le i \le j kij,其中 k k k [ 1 , n 1 3 ] [1,{n}^{\frac{1}{3}}] [1,n31] 范围内枚举, i i i [ k , ⌊ n k ⌋ ] [k,\sqrt{\lfloor \frac{n}{k} \rfloor}] [k,kn ] 范围内枚举,在 k k k i i i 确定的情况下, j j j 的取值范围可以 O ( 1 ) O(1) O(1) 得出,枚举之后更新答案即可。

求解 g ( n ) g(n) g(n) 的代码如下:

ll calc(ll n) {
    ll res = 0;
    for (ll a = 1; a * a * a <= n; a++) {
        for (ll b = a; a * b * b <= n; b++) {
            ll c = n / (a * b);
            if (c < b)   break;
            /*
                a == b 时,若 b == c,则产生 1 的贡献,
                否则 c 可行的位置有三种,因此产生 3 的贡献。
            */
            if (a == b)  res += ((c - b) * 3LL + 1LL);
            /*
                a != b 时,若 b == c,则 c 可行的位置有三种,因此产生 3 的贡												献;否则产生 3! = 6 的贡献。
            */
            else res += ((c - b) * 6LL + 3LL);
        }
    }
    return res;
}

对于 d d d,直接枚举即可。

总的时间复杂度为 T ( n ) = O ( ∑ d = 1 n T 1 ( n d 2 ) ) = O ( n 2 3 ) T(n)=O(\sum_{d=1}^{\sqrt n}T_1(\frac{n}{d^2}))=O(n^{\frac{2}{3}}) T(n)=O(d=1n T1(d2n))=O(n32)

5. BZOJ - 4176 Lucas 的数论

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4176

5.1 题意

给定 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \le n \le 10^9) n(1n109),求
∑ i = 1 n ∑ j = 1 n d ( i j ) m o d    1 0 9 + 7 \sum_{i=1}^n \sum_{j=1}^n d(ij) \mod 10^9 + 7 i=1nj=1nd(ij)mod109+7
的值。

5.2 解题过程

我们首先需要知道一个结论:
d ( n m ) = ∑ i ∣ n ∑ j ∣ m [ gcd ⁡ ( i , j ) = 1 ] d(nm)=\sum_{i|n} \sum_{j|m} [\gcd(i,j)=1] d(nm)=injm[gcd(i,j)=1]
据此结论,我们进行公式推导:
∑ i = 1 n ∑ j = 1 n d ( i j ) = ∑ i = 1 n ∑ j = 1 n ∑ a ∣ i ∑ b ∣ j [ gcd ⁡ ( a , b ) = 1 ] = ∑ i = 1 n ∑ j = 1 n ∑ a ∣ i ∑ b ∣ j ∑ d = 1 n μ ( d ) [ d ∣ i ] [ d ∣ j ] = ∑ d = 1 n μ ( d ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ a ∣ i ∑ b ∣ j 1 = ∑ d = 1 n μ ( d ) ∑ a = 1 ⌊ n d ⌋ ∑ b = 1 ⌊ n d ⌋ ∑ i = 1 ⌊ n d a ⌋ ∑ j = 1 ⌊ n d b ⌋ 1 = ∑ d = 1 n μ ( d ) ( ∑ a = 1 ⌊ n d ⌋ ⌊ n d a ⌋ ) 2 \begin{aligned} \sum_{i=1}^n \sum_{j=1}^n d(ij) &= \sum_{i=1}^n \sum_{j=1}^n \sum_{a|i} \sum_{b|j} [\gcd(a,b)=1]\\ &= \sum_{i=1}^n \sum_{j=1}^n \sum_{a|i} \sum_{b|j} \sum_{d=1}^{n}\mu(d)[d|i][d|j]\\ &= \sum_{d=1}^n \mu(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{a|i} \sum_{b|j} 1\\ &= \sum_{d=1}^n \mu(d) \sum_{a=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{b=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{i=1}^{\lfloor \frac{n}{da} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{db} \rfloor} 1\\ &= \sum_{d=1}^n \mu(d) (\sum_{a=1}^{\lfloor \frac{n}{d} \rfloor} \lfloor \frac{n}{da} \rfloor)^2\\ \end{aligned} i=1nj=1nd(ij)=i=1nj=1naibj[gcd(a,b)=1]=i=1nj=1naibjd=1nμ(d)[di][dj]=d=1nμ(d)i=1dnj=1dnaibj1=d=1nμ(d)a=1dnb=1dni=1danj=1dbn1=d=1nμ(d)(a=1dndan)2
杜教筛 + 数论分块即可,时间复杂度为 O ( n 3 4 ) O(n^\frac{3}{4}) O(n43)

6. 51Nod - 1584 加权约数和

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1584

6.1 题意

给定 n ( 1 ≤ n ≤ 1 0 6 ) n(1 \le n \le 10^6) n(1n106),求

∑ i = 1 n ∑ j = 1 n max ⁡ ( i , j ) ⋅ σ ( i j ) m o d    1 0 9 + 7 \sum_{i=1}^n \sum_{j=1}^n \max(i,j)\cdot \sigma(ij) \mod 10^9+7 i=1nj=1nmax(i,j)σ(ij)mod109+7

的值。

注意本题有 T ( 1 ≤ T ≤ 5 ⋅ 1 0 4 ) T(1 \le T \le 5 \cdot 10^4) T(1T5104) 组读入。

6.2 解题过程

鸣谢 tangjzCandy? 的题解:https://www.cnblogs.com/candy99/p/6723642.html

一个奇妙的变换:
max ⁡ ( i , j ) = ∑ k = 1 n [ k ≤ i  or  k ≤ j ] = n − ∑ k = 1 n [ k > i ] [ k > j ] \begin{aligned} \max(i,j)&=\sum_{k=1}^n[k \le i \text{ or } k \le j]\\ &=n-\sum_{k=1}^n[k > i][k > j] \end{aligned} max(i,j)=k=1n[ki or kj]=nk=1n[k>i][k>j]
代入到原式中,可以得到
∑ i = 1 n ∑ j = 1 n max ⁡ ( i , j ) ⋅ σ ( i j ) = ∑ i = 1 n ∑ j = 1 n ( n − ∑ k = 1 n [ k > i ] [ k > j ] ) ) ⋅ σ ( i j ) = n ⋅ ∑ i = 1 n ∑ j = 1 n σ ( i j ) − ∑ k = 1 n ∑ i = 1 k − 1 ∑ j = 1 k − 1 σ ( i j ) = n ⋅ f ( n ) − ∑ k = 1 n f ( k − 1 ) \begin{aligned} &\sum_{i=1}^n \sum_{j=1}^n \max(i,j) \cdot \sigma(ij)\\ =&\sum_{i=1}^n \sum_{j=1}^n (n-\sum_{k=1}^n[k > i][k > j])) \cdot \sigma(ij)\\ =& n\cdot \sum_{i=1}^n \sum_{j=1}^n \sigma(ij)- \sum_{k=1}^n \sum_{i=1}^{k-1} \sum_{j=1}^{k-1} \sigma(ij)\\ =& n\cdot f(n) - \sum_{k=1}^n f(k-1) \end{aligned} ===i=1nj=1nmax(i,j)σ(ij)i=1nj=1n(nk=1n[k>i][k>j]))σ(ij)ni=1nj=1nσ(ij)k=1ni=1k1j=1k1σ(ij)nf(n)k=1nf(k1)

f ( n ) = ∑ i = 1 n ∑ j = 1 n σ ( i j ) = ∑ i = 1 n ∑ j = 1 n ∑ a ∣ i ∑ b ∣ j a ⋅ j b [ gcd ⁡ ( a , b ) = 1 ] = ∑ d = 1 n μ ( d ) ⋅ d ∑ i = 1 ⌊ n / d ⌋ ∑ j = 1 ⌊ n / d ⌋ ∑ a ∣ i a ∑ b ∣ j b = ∑ d = 1 n μ ( d ) ⋅ d ⋅ ( ∑ i = 1 ⌊ n / d ⌋ σ ( i ) ) 2 \begin{aligned} f(n)&=\sum_{i=1}^n \sum_{j=1}^n \sigma(ij)\\ &=\sum_{i=1}^n \sum_{j=1}^n \sum_{a|i} \sum_{b|j} a \cdot \frac{j}{b} [\gcd(a,b)=1]\\ &=\sum_{d=1}^n \mu(d) \cdot d \sum_{i=1}^{\lfloor n/d \rfloor} \sum_{j=1}^{\lfloor n/d \rfloor} \sum_{a|i} a \sum_{b|j} b\\ &=\sum_{d=1}^n \mu(d) \cdot d\cdot(\sum_{i=1}^{\lfloor n/d \rfloor} \sigma(i))^2 \end{aligned} f(n)=i=1nj=1nσ(ij)=i=1nj=1naibjabj[gcd(a,b)=1]=d=1nμ(d)di=1n/dj=1n/daiabjb=d=1nμ(d)d(i=1n/dσ(i))2
如果直接进行计算的话,需要 O ( n ) O(\sqrt n) O(n ) 的时间复杂度,如果需要预处理 f ( n ) f(n) f(n) 的前缀和,则需要 O ( n n ) O(n \sqrt n) O(nn ) 的时间复杂度,会 TLE \texttt{TLE} TLE

进一步观察推出的式子,我们容易发现:对于某一个 d d d ⌊ n d ⌋ \lfloor \frac{n}{d} \rfloor dn,满足 ⌊ n d ⌋ \lfloor \frac{n}{d} \rfloor dn n n n 是一段连续的整数,因此考虑枚举 d d d ⌊ n d ⌋ \lfloor \frac{n}{d} \rfloor dn ,并维护一个差分数组 diff \texttt{diff} diff

for (int i = 1; i <= 1000000; i++) {//枚举 d
    for (int j = 1; i * j <= 1000000; j++) {//枚举 n / d
        diff[i * j] = (diff[i * j] + val) % Mod;
        diff[i * (j + 1)] = (diff[i * (j + 1)] - val + Mod) % Mod;
    }
}
for (int i = 1; i <= 1000000; i++) {
    diff[i] = (diff[i - 1] + diff[i]) % Mod;
}

因此我们可以做到 O ( n log ⁡ n ) O(n \log n) O(nlogn) 预处理, O ( 1 ) O(1) O(1) 查询。

7. ZOJ - 3881 From the ABC conjecture

题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827369985

7.1 题意

定义 rad ( n ) \text{rad}(n) rad(n) n n n 的因子中最大的无平方因子数。

f ( n ) = rad ( n ) ⋅ φ ( n rad ( n ) ) f(n) = \text{rad}(n) \cdot \varphi(\frac{n}{\text{rad}(n)}) f(n)=rad(n)φ(rad(n)n) g ( n ) = ∑ d ∣ n f ( d ) g(n) = \sum_{d|n}f(d) g(n)=dnf(d)

∑ i = 1 n g ( i ) m o d    1 0 9 + 9 \sum_{i=1}^n g(i) \mod 10^9+9 i=1ng(i)mod109+9 的值,其中 1 ≤ n ≤ 1 0 12 1 \le n \le 10^{12} 1n1012

7.2 解题过程

鸣谢 tangjz 的题解:https://blog.csdn.net/skywalkert/article/details/50505260

  1. n = p 1 k 1 p 2 k 2 ⋯ p m k m n=p_1^{k_1} p_2^{k_2} \cdots p_m^{k_m} n=p1k1p2k2pmkm,则显然 rad ( n ) = p 1 p 2 ⋯ p m \text{rad}(n)=p_1 p_2 \cdots p_m rad(n)=p1p2pm,因此 rad ( n ) \text{rad}(n) rad(n) 为积性函数。

  2. gcd ⁡ ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1,则 f ( a b ) = rad ( a b ) ⋅ φ ( a b rad ( a b ) ) = rad ( a ) ⋅ φ ( a rad ( a ) ) ⋅ rad ( b ) ⋅ φ ( b rad ( b ) ) f(ab)=\text{rad}(ab)\cdot \varphi(\frac{ab}{\text{rad}(ab)})=\text{rad}(a)\cdot \varphi(\frac{a}{\text{rad}(a)})\cdot\text{rad}(b)\cdot \varphi(\frac{b}{\text{rad}(b)}) f(ab)=rad(ab)φ(rad(ab)ab)=rad(a)φ(rad(a)a)rad(b)φ(rad(b)b),因此 f ( n ) f(n) f(n) 为积性函数。

  3. g ( n ) = ∏ i = 1 m ∑ j = 0 k m f ( p i j ) = ∏ i = 1 m ( 1 + p i + p i ( p i − 1 ) + p i 2 ( p i − 1 ) + ⋯   ) = ∏ i = 1 m ( 1 + p i k m ) = ∑ i = 1 n ∑ j = 1 n [ i j = n ] [ gcd ⁡ ( i , j ) = 1 ] ⋅ i \begin{aligned} g(n) &= \prod_{i=1}^m \sum_{j=0} ^ {k_m} f(p_i^j)\\ &= \prod_{i=1}^m (1 + p_i + p_i(p_i-1) + p_i^2(p_i-1)+\cdots)\\ &= \prod_{i=1}^m (1 + p_i^{k_m})\\ &= \sum_{i=1} ^ n \sum_{j=1} ^ n [ij=n][\gcd(i,j)=1]\cdot i \end{aligned} g(n)=i=1mj=0kmf(pij)=i=1m(1+pi+pi(pi1)+pi2(pi1)+)=i=1m(1+pikm)=i=1nj=1n[ij=n][gcd(i,j)=1]i

  4. ∑ k = 1 n g ( k ) = ∑ k = 1 n ∑ i = 1 n ∑ j = 1 n [ i j = n ] [ gcd ⁡ ( i , j ) = 1 ] ⋅ i = ∑ i = 1 n ∑ j = 1 n [ i j ≤ n ] [ gcd ⁡ ( i , j ) = 1 ] ⋅ i = ∑ i = 1 n i ∑ j = 1 n [ i j ≤ n ] ∑ d = 1 min ⁡ ( i , j ) μ ( d ) [ d ∣ i ] [ d ∣ j ] = ∑ d = 1 n μ ( d ) ∑ i = 1 ⌊ n d 2 ⌋ d i ∑ j = 1 ⌊ n d 2 i ⌋ 1 = ∑ d = 1 n μ ( d ) ⋅ d ∑ i = 1 ⌊ n d 2 ⌋ i ∑ j = 1 ⌊ n d 2 i ⌋ 1 \begin{aligned} \sum_{k=1} ^ n g(k) &= \sum_{k=1}^n \sum_{i=1} ^ n \sum_{j=1} ^ n [ij=n][\gcd(i,j)=1]\cdot i\\ &= \sum_{i=1} ^ n \sum_{j=1} ^ n [ij\le n][\gcd(i,j)=1]\cdot i\\ &= \sum_{i=1} ^ n i \sum_{j=1} ^ n [ij\le n] \sum_{d=1}^{\min(i,j)} \mu(d) [d|i] [d|j]\\ &= \sum_{d=1} ^ {\sqrt n} \mu(d) \sum_{i=1} ^ {\lfloor \frac{n}{d^2} \rfloor} di \sum_{j=1}^{\lfloor \frac{n}{d^2 i} \rfloor} 1\\ &= \sum_{d=1} ^ {\sqrt n} \mu(d) \cdot d \sum_{i=1} ^ {\lfloor \frac{n}{d^2} \rfloor} i \sum_{j=1}^{\lfloor \frac{n}{d^2 i} \rfloor} 1\\ \end{aligned} k=1ng(k)=k=1ni=1nj=1n[ij=n][gcd(i,j)=1]i=i=1nj=1n[ijn][gcd(i,j)=1]i=i=1nij=1n[ijn]d=1min(i,j)μ(d)[di][dj]=d=1n μ(d)i=1d2ndij=1d2in1=d=1n μ(d)di=1d2nij=1d2in1

  5. 暴力枚举 d d d,并通过数论分块计算内层求和即可。

8. BZOJ - 3512 DZY Loves Math IV

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3512

8.1 题意


∑ i = 1 n ∑ j = 1 m φ ( i j ) \sum_{i=1}^n \sum_{j=1}^m \varphi(ij) i=1nj=1mφ(ij)
的值,其中 n ≤ 1 0 5 , m ≤ 1 0 9 n \le 10^5,m \le 10^9 n105,m109

8.2 解题过程

鸣谢 permui 的题解:https://www.cnblogs.com/owenyu/p/7349860.html

首先我们需要知道欧拉函数的一个重要性质:
φ ( i j ) = φ ( i ) ⋅ φ ( j gcd ⁡ ( i , j ) ) ⋅ gcd ⁡ ( i , j ) \varphi(ij)=\varphi(i) \cdot \varphi(\frac{j}{\gcd(i,j)}) \cdot \gcd(i,j) φ(ij)=φ(i)φ(gcd(i,j)j)gcd(i,j)
因为 n n n 比较小,所以我们可以考虑枚举 n n n,然后求出 S ( n , m ) = ∑ i = 1 m φ ( n i ) S(n,m)=\sum_{i=1} ^ m \varphi(ni) S(n,m)=i=1mφ(ni) 的值。

x x x n n n 的质因子之和, y = n x y = \frac{n}{x} y=xn,则有:
S ( n , m ) = ∑ i = 1 m φ ( n i ) = y ∑ i = 1 m φ ( x i ) = y ∑ i = 1 m φ ( x gcd ⁡ ( x , i ) ) ⋅ φ ( i ) ⋅ gcd ⁡ ( x , i ) = y ∑ i = 1 m φ ( x gcd ⁡ ( x , i ) ) ⋅ φ ( i ) ∑ d ∣ gcd ⁡ ( x , i ) φ ( d ) = y ∑ i = 1 m φ ( i ) ∑ d ∣ gcd ⁡ ( x , i ) φ ( x d ) = y ∑ i = 1 m φ ( i ) ∑ d ∣ x , d ∣ i φ ( x d ) = y ∑ d ∣ x φ ( x d ) ∑ i = 1 ⌊ w d ⌋ φ ( d i ) = y ∑ d ∣ x φ ( x d ) S ( d , ⌊ m d ⌋ ) \begin{aligned} S(n,m) &= \sum_{i=1} ^ m \varphi(ni)\\ &= y \sum_{i=1} ^ m \varphi(xi)\\ &= y \sum_{i=1} ^ m \varphi(\frac{x}{\gcd(x,i)}) \cdot \varphi(i) \cdot \gcd(x,i)\\ &= y \sum_{i=1} ^ m \varphi(\frac{x}{\gcd(x,i)}) \cdot \varphi(i) \sum_{d|\gcd(x,i)} \varphi(d)\\ &= y \sum_{i=1} ^ m \varphi(i) \sum_{d|\gcd(x,i)} \varphi(\frac{x}{d})\\ &= y \sum_{i=1} ^ m \varphi(i) \sum_{d|x,d|i} \varphi(\frac{x}{d})\\ &= y \sum_{d|x} \varphi(\frac{x}{d}) \sum_{i=1} ^ {\lfloor \frac{w}{d} \rfloor} \varphi(di)\\ &= y \sum_{d|x} \varphi(\frac{x}{d}) S(d, \lfloor \frac{m}{d} \rfloor) \end{aligned} S(n,m)=i=1mφ(ni)=yi=1mφ(xi)=yi=1mφ(gcd(x,i)x)φ(i)gcd(x,i)=yi=1mφ(gcd(x,i)x)φ(i)dgcd(x,i)φ(d)=yi=1mφ(i)dgcd(x,i)φ(dx)=yi=1mφ(i)dx,diφ(dx)=ydxφ(dx)i=1dwφ(di)=ydxφ(dx)S(d,dm)
容易发现, S ( n , m ) S(n,m) S(n,m) 是一个递归定义的式子,其边界条件为 n = 1 n=1 n=1,此时问题简化为杜教筛求欧拉函数的前缀和;其他情况下,递归 + 记忆化搜索即可。

可以发现,对于每一个 n n n S S S 的第二维只有 O ( m ) O(\sqrt m) O(m ) 种取值,

因此时间复杂度为 O ( n ⋅ m + n 2 3 ) O(n \cdot \sqrt m + n^{\frac{2}{3}}) O(nm +n32)

9. 51Nod - 1847 奇怪的数学题

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1847

9.1 题意

定义 sgcd ( i , j ) \text{sgcd}(i,j) sgcd(i,j) 表示 i i i j j j 的次大公约数,特别地,若 gcd ⁡ ( i , j ) = 1 \gcd(i,j)=1 gcd(i,j)=1,则 sgcd ( i , j ) = 0 \text{sgcd}(i,j)=0 sgcd(i,j)=0


∑ i = 1 n ∑ j = 1 n ( sgcd ( i , j ) ) k \sum_{i=1}^n \sum_{j=1}^n (\text{sgcd}(i,j))^k i=1nj=1n(sgcd(i,j))k
的值,其中 1 ≤ n ≤ 1 0 9 , 1 ≤ k ≤ 50 1 \le n \le 10^9,1 \le k \le 50 1n109,1k50

9.2 解题过程

鸣谢 yww 的题解:https://www.cnblogs.com/ywwyww/p/9113548.html

先推式子!

很显然, sgcd ( i , j ) \text{sgcd}(i,j) sgcd(i,j) 的值仅与 gcd ⁡ ( i , j ) \gcd(i,j) gcd(i,j) 有关,相当于将 gcd ⁡ ( i , j ) \gcd(i,j) gcd(i,j) 除以其最大质因子。

为方便处理,我们设 sgcd ( i , j ) = f ( gcd ⁡ ( i , j ) ) \text{sgcd}(i,j)=f(\gcd(i,j)) sgcd(i,j)=f(gcd(i,j))

之后,我们有:
∑ i = 1 n ∑ j = 1 n ( sgcd ( i , j ) ) k = ∑ i = 1 n ∑ j = 1 n f ( gcd ⁡ ( i , j ) ) k = ∑ l = 1 n ∑ i = 1 n ∑ j = 1 n f ( l ) k [ gcd ⁡ ( i , j ) = l ] = ∑ l = 1 n f ( l ) k ( 2 ∑ j = 1 ⌊ n i ⌋ φ ( j ) − 1 ) \begin{aligned} \sum_{i=1}^n \sum_{j=1}^n (\text{sgcd}(i,j))^k &= \sum_{i=1}^n \sum_{j=1}^n f(\gcd(i,j))^k\\ &= \sum_{l=1}^n \sum_{i=1}^n \sum_{j=1}^n f(l)^k [\gcd(i,j)=l] \\ &= \sum_{l=1}^n f(l)^k (2\sum_{j=1}^{\lfloor \frac{n}{i} \rfloor} \varphi(j) - 1) \end{aligned} i=1nj=1n(sgcd(i,j))k=i=1nj=1nf(gcd(i,j))k=l=1ni=1nj=1nf(l)k[gcd(i,j)=l]=l=1nf(l)k(2j=1inφ(j)1)
很显然,这一式子可以通过数论分块 + 杜教筛求出。

但是 f ( l ) k f(l)^k f(l)k 这一部分需要单独处理。

观察 min_25 g ( n , j ) g(n,j) g(n,j) 函数的转移方程:
g ( n , j ) = { g ( n , j − 1 ) , p j 2 > n g ( n , j − 1 ) − p j k [ g ( ⌊ n p j ⌋ , j − 1 ) − ∑ i = 1 j − 1 p i k ] , p j 2 ≤ n \begin{aligned} g(n,j) &=\left\{ \begin{array}{c} g(n,j-1),p_j^2 > n\\ g(n,j-1)-p_j^k[g(\lfloor \frac{n}{p_j} \rfloor, j - 1) - \sum_{i=1}^{j-1}p_i^k], p_j^2 \le n \end{array} \right. \end{aligned} g(n,j)={g(n,j1),pj2>ng(n,j1)pjk[g(pjn,j1)i=1j1pik],pj2n
我们可以发现 g ( ⌊ n p j ⌋ , j − 1 ) − ∑ i = 1 j − 1 p i k g(\lfloor \frac{n}{p_j} \rfloor, j - 1) - \sum_{i=1}^{j-1}p_i^k g(pjn,j1)i=1j1pik 的含义是最小质因子为 p j p_j pj 的数除以 p j p_j pj 之后的 k k k 次方和,这满足了 sgcd \text{sgcd} sgcd 的定义。因此我们可以在计算 g g g 函数时,将所有的 g ( ⌊ n p j ⌋ , j − 1 ) − ∑ i = 1 j − 1 p i k g(\lfloor \frac{n}{p_j} \rfloor, j - 1) - \sum_{i=1}^{j-1}p_i^k g(pjn,j1)i=1j1pik 贡献到 n n n 的答案中。

注意到 g g g 函数是不考虑 1 1 1 的,在 sgcd \text{sgcd} sgcd 的含义下,相当于没有把质数的贡献加入其中。

因此我们在处理时,需要把质数的贡献,即 [ 2 , n ] [2,n] [2,n] 之间质数的个数加到答案中。

本题中,min_25 筛需要借助于 k k k 次方和求和函数。

总的时间复杂度为:
O ( 1 0 6 log ⁡ k + k 2 n + n 3 4 log ⁡ n + n 2 3 ) O(10^6 \log k + k^2\sqrt n + \frac{n^{\frac{3}{4}}}{\log n} + n^{\frac{2}{3}}) O(106logk+k2n +lognn43+n32)

10. SPOJ - DIVCNT2

题目链接:http://spoj.com/problems/DIVCNT2

10.1 题意

给定 n ( 1 ≤ n ≤ 1 0 12 ) n(1 \le n \le 10^{12}) n(1n1012),求
∑ i = 1 n d ( i 2 ) \sum_{i=1}^n d(i^2) i=1nd(i2)
的值。

10.2 解题过程

鸣谢 Candy? 的题解:https://www.cnblogs.com/candy99/p/6715013.html

n = p 1 k 1 p 2 k 2 ⋯ p m k m n=p_1^{k_1} p_2^{k_2} \cdots p_m^{k_m} n=p1k1p2k2pmkm,则 n 2 = p 1 2 k 1 p 2 2 k 2 ⋯ p m 2 k m n^2=p_1^{2k_1} p_2^{2k_2} \cdots p_m^{2k_m} n2=p12k1p22k2pm2km

我们需要考虑在 n 2 n^2 n2 中存在,但在 n n n 中不存在的因子。

对于任意 d ∣ n d|n dn,考虑其质因子 p p p,设其次数为 k k k,该质因子在 n n n 中的次数为 k 0 k_0 k0,则我们发现:

p k p^k pk n n n n 2 n^2 n2 中都出现,而 p k + k 0 p^{k+k_0} pk+k0 只在 n 2 n^2 n2 中出现。

因为我们会枚举到 n n n 的所有因子,所以对于 d d d 的每个质因子,只需考虑 p k p^k pk p k + k 0 p^{k + k_0} pk+k0 两种情况即可。

上述过程可以表达为:
d ( n 2 ) = ∑ d ∣ n 2 w ( d ) d(n^2)=\sum_{d|n}2^{w(d)} d(n2)=dn2w(d)
其中 w ( d ) w(d) w(d) d d d 的质因子个数。

根据 2 w ( n ) = ∑ d ∣ n μ 2 ( d ) 2^{w(n)}=\sum_{d|n}\mu^2(d) 2w(n)=dnμ2(d),我们可对上式进一步化简。
d ( n 2 ) = ∑ d ∣ n 2 w ( d ) = ∑ d ∣ n ∑ e ∣ d μ 2 ( e ) = ( μ 2 ∗ 1 ) ∗ 1 = μ 2 ∗ ( 1 ∗ 1 ) = μ 2 ∗ d \begin{aligned} d(n^2) &= \sum_{d|n}2^{w(d)}\\ &= \sum_{d|n} \sum_{e|d}\mu^2(e)\\ &= (\mu^2 * 1)*1 \\ &= \mu^2 * (1 * 1)\\ &= \mu^2 * d \end{aligned} d(n2)=dn2w(d)=dnedμ2(e)=(μ21)1=μ2(11)=μ2d
因此有
∑ i = 1 n d ( i 2 ) = ∑ i = 1 n ( μ 2 ∗ d ) ( n ) = ∑ i = 1 n ∑ e ∣ i μ 2 ( e ) ⋅ d ( i e ) = ∑ e = 1 n μ 2 ( e ) ∑ i = 1 ⌊ n e ⌋ d ( i ) \begin{aligned} \sum_{i=1}^n d(i^2) &= \sum_{i=1}^n {(\mu^2 * d)(n)}\\ &= \sum_{i=1}^n \sum_{e|i} \mu^2(e)\cdot d(\frac{i}{e})\\ &= \sum_{e=1}^n \mu^2(e) \sum_{i=1}^{\lfloor \frac{n}{e} \rfloor} d(i) \end{aligned} i=1nd(i2)=i=1n(μ2d)(n)=i=1neiμ2(e)d(ei)=e=1nμ2(e)i=1end(i)
我们发现,
∑ i = 1 n μ 2 ( i ) = ∑ i 2 ∣ n μ ( i ) = ∑ i = 1 n μ ( i ) ⋅ ⌊ n i 2 ⌋ \sum_{i=1}^n \mu^2(i)=\sum_{i^2|n}\mu(i) = \sum_{i=1}^{\sqrt n} \mu(i) \cdot \lfloor \frac{n}{i^2} \rfloor i=1nμ2(i)=i2nμ(i)=i=1n μ(i)i2n

∑ i = 1 n d ( i ) = ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^n d(i) = \sum_{i=1}^n \lfloor \frac{n}{i} \rfloor i=1nd(i)=i=1nin

因此,参考杜教筛的时间复杂度证明,我们可以预处理出 μ 2 ( i ) \mu^2(i) μ2(i) d ( i ) d(i) d(i) 的前 n 2 3 n^{\frac{2}{3}} n32 项和,后面的部分直接数论分块即可。

总的时间复杂度为: O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)

本题另有 min_25 筛的做法,因其过于简单,这里不再赘述。

11. SPOJ - DIVCNTK

题目链接:http://spoj.com/problems/DIVCNTK

10.1 题意

给定 n , k ( 1 ≤ n , k ≤ 1 0 10 ) n,k(1 \le n,k \le 10^{10}) n,k(1n,k1010),求
∑ i = 1 n d ( i k ) m o d    2 64 \sum_{i=1}^n d(i^k) \mod 2^{64} i=1nd(ik)mod264
的值。

10.2 解题过程

n = p 1 l 1 p 2 l 2 ⋯ p m l m n=p_1^{l_1} p_2^{l_2} \cdots p_m^{l_m} n=p1l1p2l2pmlm,则 n = p 1 k l 1 p 2 k l 2 ⋯ p m k l m n=p_1^{kl_1} p_2^{kl_2} \cdots p_m^{kl_m} n=p1kl1p2kl2pmklm

f ( n ) = d ( n k ) f(n)=d(n^k) f(n)=d(nk),则有

f ( 1 ) = 1 f(1)=1 f(1)=1 f ( p ) = k + 1 f(p)=k+1 f(p)=k+1 f ( p l ) = k l + 1 f(p^l)=kl+1 f(pl)=kl+1,直接 min_25 筛即可。

时间复杂度: O ( n 3 4 log ⁡ n ) O(\frac{n^\frac{3}{4}}{\log n}) O(lognn43)

12. 51Nod - 1594 Gcd and Phi

http://www.51nod.com/Challenge/Problem.html#problemId=1594

12.1 题意

给定 n ( 1 ≤ n ≤ 2 ⋅ 1 0 6 ) n(1 \le n \le 2 \cdot 10^6) n(1n2106),求
∑ i = 1 n ∑ j = 1 n φ ( gcd ⁡ ( φ ( i ) , φ ( j ) ) ) \sum_{i=1}^n \sum_{j=1}^n \varphi(\gcd(\varphi(i),\varphi(j))) i=1nj=1nφ(gcd(φ(i),φ(j)))
的值。

12.2 解题过程

本题需要从计数的角度,对原式进行变换。

g ( k ) = ∑ i = 1 n [ φ ( i ) = k ] g(k) = \sum_{i=1}^n[\varphi(i)=k] g(k)=i=1n[φ(i)=k],则有
∑ i = 1 n ∑ j = 1 n φ ( gcd ⁡ ( φ ( i ) , φ ( j ) ) ) = ∑ i = 1 n ∑ j = 1 n φ ( gcd ⁡ ( i , j ) ) ⋅ g ( i ) g ( j ) = ∑ k = 1 n φ ( k ) ∑ i = 1 n ∑ j = 1 n g ( i ) g ( j ) [ gcd ⁡ ( i , j ) = k ] = ∑ k = 1 n φ ( k ) ( ∑ i = 1 ⌊ n k ⌋ g ( k i ) ) 2 ∑ d = 1 ⌊ n k ⌋ μ ( d ) [ d ∣ i ] [ d ∣ j ] = ∑ k = 1 n φ ( k ) ∑ d = 1 ⌊ n k ⌋ μ ( d ) ( ∑ i = 1 ⌊ n k d ⌋ g ( k d i ) ) 2 \begin{aligned} &\sum_{i=1}^n \sum_{j=1}^n \varphi(\gcd(\varphi(i),\varphi(j)))\\ =& \sum_{i=1}^n \sum_{j=1}^n \varphi(\gcd(i,j)) \cdot g(i)g(j)\\ =& \sum_{k=1}^n \varphi(k) \sum_{i=1}^{n} \sum_{j=1}^{n} g(i)g(j) [\gcd(i,j)=k]\\ =& \sum_{k=1}^n \varphi(k) (\sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} g(ki))^2 \sum_{d=1}^{\lfloor \frac{n}{k} \rfloor} \mu(d)[d|i][d|j]\\ =& \sum_{k=1}^n \varphi(k) \sum_{d=1}^{\lfloor \frac{n}{k} \rfloor} \mu(d) (\sum_{i=1}^{\lfloor \frac{n}{kd} \rfloor} g(kdi))^2 \end{aligned} ====i=1nj=1nφ(gcd(φ(i),φ(j)))i=1nj=1nφ(gcd(i,j))g(i)g(j)k=1nφ(k)i=1nj=1ng(i)g(j)[gcd(i,j)=k]k=1nφ(k)(i=1kng(ki))2d=1knμ(d)[di][dj]k=1nφ(k)d=1knμ(d)(i=1kdng(kdi))2
在线性筛预处理出 φ \varphi φ 的基础上, g ( n ) g(n) g(n) 的值可以 O ( n ) O(n) O(n) 预处理出。

memset(g, 0, sizeof(g));
for (int i = 1; i <= n; i++) {
    g[phi[i]]++;
}

观察 ∑ i = 1 ⌊ n k d ⌋ g ( k d i ) \sum_{i=1}^{\lfloor \frac{n}{kd} \rfloor} g(kdi) i=1kdng(kdi),可以发现这是对 k d kd kd 倍数的 g g g 值求和,因此可以 O ( n log ⁡ n ) O(n \log n) O(nlogn) 进行预处理。

for (int i = 1; i <= n; i++) {
    for (int j = i + i; j <= n; j += i) {
        g[i] += g[j];
    }
}

最后 O ( n log ⁡ n ) O(n \log n) O(nlogn) 地枚举 k k k d d d,求和即可。

13. 51Nod - 2026 Gcd and Lcm

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=2026

13.1 题意

定义 f ( n ) = ∑ d ∣ n μ ( d ) ⋅ d f(n)=\sum_{d|n}\mu(d)\cdot d f(n)=dnμ(d)d,给定 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \le n \le 10^9) n(1n109),求
∑ i = 1 n ∑ j = 1 n f ( gcd ⁡ ( i , j ) ) ⋅ f ( lcm ( i , j ) ) m o d    1 0 9 + 7 \sum_{i=1}^n \sum_{j=1}^n f(\gcd(i,j))\cdot f(\text{lcm}(i,j)) \mod 10^9 + 7 i=1nj=1nf(gcd(i,j))f(lcm(i,j))mod109+7
的值。

13.2 解题过程

显然 f ( n ) f(n) f(n) 为积性函数。

做题时不要直接套路推式子!!

如果把 f ( gcd ⁡ ( i , j ) ) ⋅ f ( lcm ( i , j ) ) f(\gcd(i,j))\cdot f(\text{lcm}(i,j)) f(gcd(i,j))f(lcm(i,j)) 拆成质因子幂次函数值乘积的形式,会发现它们经过某些交换之后,可以化成 f ( i ) ⋅ f ( j ) f(i)\cdot f(j) f(i)f(j) 的形式。

因此式子转化为
∑ i = 1 n ∑ j = 1 n f ( i ) f ( j ) = ( ∑ i = 1 n f ( i ) ) 2 \sum_{i=1}^n \sum_{j=1}^n f(i)f(j)=(\sum_{i=1}^n f(i))^2 i=1nj=1nf(i)f(j)=(i=1nf(i))2

f = ( μ ⋅ i d ) ∗ I f=(\mu \cdot id) * I f=(μid)I
我们将 f f f 卷上 i d id id,得到
f ∗ i d = ( μ ⋅ i d ) ∗ i d ∗ I = I f * id=(\mu \cdot id) * id * I= I fid=(μid)idI=I
因此 f f f 的前缀和可以线性筛 + 杜教筛求出,时间复杂度为 O ( n 2 3 ) O(n ^ {\frac{2}{3}}) O(n32)

14. Luogu - P5221 Product

题目链接:https://www.luogu.org/problem/P5221

14.1 题意

给定 n ( 1 ≤ n ≤ 1 0 6 ) n(1 \le n \le 10^6) n(1n106),求
∏ i = 1 n ∏ j = 1 n lcm ( i , j ) gcd ⁡ ( i , j ) m o d    104857601 \prod_{i=1}^n \prod_{j=1}^n \frac{\text{lcm}(i,j)}{\gcd(i,j)} \mod 104857601 i=1nj=1ngcd(i,j)lcm(i,j)mod104857601
的值。

14.2 解题过程

鸣谢 Nemlit 的题解:https://www.luogu.org/blog/tbr-blog/solution-p5221
∏ i = 1 n ∏ j = 1 n lcm ( i , j ) gcd ⁡ ( i , j ) = ∏ i = 1 n ∏ j = 1 n i j gcd ⁡ 2 ( i , j ) = ( ∏ i = 1 n ∏ j = 1 n i j ) ⋅ ( ∏ i = 1 n ∏ j = 1 n gcd ⁡ ( i , j ) ) − 2 \begin{aligned} &\prod_{i=1}^n \prod_{j=1}^n \frac{\text{lcm}(i,j)}{\gcd(i,j)}\\ =& \prod_{i=1}^n \prod_{j=1}^n \frac{ij}{\gcd^2(i,j)}\\ =& (\prod_{i=1}^n \prod_{j=1}^n ij)\cdot(\prod_{i=1}^n \prod_{j=1}^n \gcd(i,j))^{-2} \end{aligned} ==i=1nj=1ngcd(i,j)lcm(i,j)i=1nj=1ngcd2(i,j)ij(i=1nj=1nij)(i=1nj=1ngcd(i,j))2

其中,
∏ i = 1 n ∏ j = 1 n i j = ∏ i = 1 n ( i n ⋅ n ! ) = ( n ! ) n ⋅ ( n ! ) n = ( n ! ) 2 n \begin{aligned} & \prod_{i=1}^n \prod_{j=1}^n ij\\ =& \prod_{i=1}^n (i^n \cdot n!)\\ =& (n!)^n\cdot (n!)^n\\ =& (n!)^{2n} \end{aligned} ===i=1nj=1niji=1n(inn!)(n!)n(n!)n(n!)2n

∏ i = 1 n ∏ j = 1 n gcd ⁡ ( i , j ) = ∏ d = 1 n d ∑ i = 1 n ∑ j = 1 n [ gcd ⁡ ( i , j ) = d ] = ∏ d = 1 n d ( 2 ∑ i = 1 ⌊ n / d ⌋ φ ( i ) ) − 1 \begin{aligned} &\prod_{i=1}^n \prod_{j=1}^n \gcd(i,j)\\ =& \prod_{d=1}^n d^{\sum_{i=1}^n \sum_{j=1}^n [\gcd(i,j)=d]}\\ =& \prod_{d=1}^n d^{(2\sum_{i=1}^{\lfloor n/d \rfloor} \varphi(i))-1} \\ \end{aligned} ==i=1nj=1ngcd(i,j)d=1ndi=1nj=1n[gcd(i,j)=d]d=1nd(2i=1n/dφ(i))1

二者合并之后,枚举 d d d,之后欧拉降幂 + 矩阵快速幂即可。

时间复杂度: O ( n log ⁡ 1 0 8 ) O(n \log 10^8) O(nlog108)

请特别注意本题的时空限制( 200   ms,7.81   MB \texttt{200 ms,7.81 MB} 200 ms,7.81 MB)。

15. Luogu - P3172 [CQOI2015]选数

题目链接:https://www.luogu.org/problem/P3172

15.1 题意

给定整数 n , k , l , h ( 1 ≤ n , k ≤ 1 0 9 , 1 ≤ l ≤ h ≤ 1 0 9 , h − l ≤ 1 0 5 ) n,k,l,h(1 \le n,k \le 10^9,1 \le l \le h \le 10^9,h-l \le 10^5) n,k,l,h(1n,k109,1lh109,hl105),从区间 [ l , h ] [l,h] [l,h] 中选取 n n n 个整数(可以重复选取),问最大公约数恰好为 k k k 的选取方案有多少个。

答案对 1 0 9 + 7 10^9+7 109+7 取模。

15.2 解题过程

根据题意,实际上我们要求的是下面式子的值:
∑ a 1 = l h ∑ a 2 = l h ⋯ ∑ a n = l h [ gcd ⁡ ( a 1 , a 2 , ⋯   , a n ) = k ] = ∑ d = 1 ⌊ h / k ⌋ μ ( d ) ⋅ ( ⌊ h d k ⌋ − ⌊ l − 1 d k ⌋ ) n \begin{aligned} &\sum_{a_1=l}^{h} \sum_{a_2=l}^{h} \cdots \sum_{a_n=l}^{h}[\gcd(a_1,a_2,\cdots,a_n)=k]\\ =&\sum_{d=1}^{\lfloor h/k \rfloor} \mu(d) \cdot (\lfloor \frac{h}{dk} \rfloor-\lfloor \frac{l-1}{dk} \rfloor)^n \end{aligned} =a1=lha2=lhan=lh[gcd(a1,a2,,an)=k]d=1h/kμ(d)(dkhdkl1)n
预处理 ⌊ h d k ⌋ − ⌊ l − 1 d k ⌋ \lfloor \frac{h}{dk} \rfloor-\lfloor \frac{l-1}{dk} \rfloor dkhdkl1 的幂次,之后分段整除分块 + 杜教筛即可。

16. Luogu - P4844 LJJ 爱数数

题目链接:https://www.luogu.org/problem/P4844

16.1 题意

给定 n ( 1 ≤ n ≤ 1 0 12 ) n(1 \le n \le 10^{12}) n(1n1012),求满足下列条件的三元组 ( a , b , c ) ( a , b , c ≤ n ) (a,b,c)(a,b,c \le n) (a,b,c)(a,b,cn) 的个数:

  1. gcd ⁡ ( a , b , c ) = 1 \gcd(a,b,c)=1 gcd(a,b,c)=1
  2. 1 a + 1 b = 1 c \frac{1}{a}+\frac{1}{b}=\frac{1}{c} a1+b1=c1

16.2 解题过程

鸣谢 lxl 的题解:https://www.luogu.org/blog/Ynoi/solution-p4844

根据 1 a + 1 b = 1 c \frac{1}{a}+\frac{1}{b}=\frac{1}{c} a1+b1=c1,可以得出 a b = c a + c b ab=ca+cb ab=ca+cb,移项之后,两边同时加上 c 2 c^2 c2,得到 a b − a c − b c + c 2 = c 2 ab-ac-bc+c^2=c^2 abacbc+c2=c2

因式分解后得到 c 2 = ( a − c ) ( b − c ) c^2=(a-c)(b-c) c2=(ac)(bc)

a − c = k x 2 a-c=kx^2 ac=kx2 b − c = k y 2 b-c=ky^2 bc=ky2,则有 c 2 = k 2 x 2 y 2 c^2=k^2x^2y^2 c2=k2x2y2,解出 c = k x y c=kxy c=kxy

gcd ⁡ ( a , b , c ) = 1 \gcd(a,b,c)=1 gcd(a,b,c)=1,根据反证法可以推出 k = 1 k=1 k=1,因此

a − c = x 2 a-c=x^2 ac=x2 b − c − y 2 b-c-y^2 bcy2 c = x y c=xy c=xy


gcd ⁡ ( a , b , c ) = gcd ⁡ ( x 2 + x y , y 2 + x y , x y ) = gcd ⁡ ( x ( x + y ) , y ( x + y ) , x y ) = gcd ⁡ ( ( x + y ) gcd ⁡ ( x , y ) , x y ) = 1 \begin{aligned} &\gcd(a,b,c)\\ =&\gcd(x^2+xy,y^2+xy,xy)\\ =&\gcd(x(x+y),y(x+y),xy)\\ =&\gcd((x+y)\gcd(x,y),xy)\\ =&1 \end{aligned} ====gcd(a,b,c)gcd(x2+xy,y2+xy,xy)gcd(x(x+y),y(x+y),xy)gcd((x+y)gcd(x,y),xy)1
解出 gcd ⁡ ( x , y ) = 1 \gcd(x,y)=1 gcd(x,y)=1,因此 gcd ⁡ ( x 2 , y 2 ) = 1 \gcd(x^2,y^2)=1 gcd(x2,y2)=1,即 gcd ⁡ ( a − c , b − c ) = 1 \gcd(a-c,b-c)=1 gcd(ac,bc)=1

x ∈ [ 1 , a − c ] x \in [1, \sqrt{a-c}] x[1,ac ],当 y y y 的范围确定之后,问题转化为求 gcd ⁡ ( x , y ) = 1 \gcd(x,y)=1 gcd(x,y)=1 ( x , y ) (x,y) (x,y) 个数。

下面我们来确定 y y y 的范围。

由题意可知 a , b , c ≤ n a,b,c \le n a,b,cn,我们从此入手。

(1) 根据 c ≤ n c \le n cn 以及 x y = c xy=c xy=c,可知 y = c x ≤ n x y=\frac{c}{x}\le\frac{n}{x} y=xcxn

(2) 根据 a ≤ n a \le n an 以及 a − c = x 2 a-c=x^2 ac=x2,可知 a = x 2 + c = x 2 + x y ≤ n a=x^2+c=x^2+xy\le n a=x2+c=x2+xyn,解出 y ≤ n − x 2 x y \le \frac{n-x^2}{x} yxnx2

(3) 根据 b ≤ n b \le n bn 以及 b − c = y 2 b-c=y^2 bc=y2,可知 y 2 + x y = b ≤ n y^2+xy=b\le n y2+xy=bn,解出 0 < y ≤ − x 2 + n + x 2 4 0 < y \le -\frac{x}{2}+\sqrt{n+\frac{x^2}{4}} 0<y2x+n+4x2 .

最终可确定 y y y 的上限 f ( y ) = min ⁡ ( n − x 2 x , − x 2 + n + x 2 4 ) f(y) = \min(\frac{n-x^2}{x}, -\frac{x}{2}+\sqrt{n+\frac{x^2}{4}}) f(y)=min(xnx2,2x+n+4x2 )

因此最终的答案为 ∑ x = 1 n ∑ y = 1 f ( x ) [ gcd ⁡ ( x , y ) = 1 ] \sum_{x=1}^{\sqrt n} \sum_{y=1}^{f(x)}[\gcd(x,y)=1] x=1n y=1f(x)[gcd(x,y)=1],我们将内层循环单独拿出来计算:
∑ y = 1 f ( x ) [ gcd ⁡ ( x , y ) = 1 ] = ∑ y = 1 f ( x ) ∑ d = 1 f ( x ) μ ( d ) [ d ∣ x ] [ d ∣ y ] = ∑ d = 1 , d ∣ x f ( x ) μ ( d ) ⌊ f ( x ) d ⌋ \begin{aligned} &\sum_{y=1}^{f(x)}[\gcd(x,y)=1]\\ =&\sum_{y=1}^{f(x)} \sum_{d=1}^{f(x)} \mu(d) [d|x] [d|y]\\ =&\sum_{d=1,d|x}^{f(x)} \mu(d)\lfloor \frac{f(x)}{d} \rfloor \end{aligned} ==y=1f(x)[gcd(x,y)=1]y=1f(x)d=1f(x)μ(d)[dx][dy]d=1,dxf(x)μ(d)df(x)
因此,我们只需通过枚举倍数的方式即可计算出答案,代码如下:

for (int i = 1; i <= range; i++) {
    for (int j = i; j <= range; j += i) {
        ans += mu[i] * (F[j] / i);
    }
}

时间复杂度: O ( n log ⁡ n ) O(\sqrt n \log \sqrt n) O(n logn )

17. 51Nod - 1575 Gcd and Lcm

17.1 题意

给定 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \le n \le 10^9) n(1n109),求
∑ i = 1 n ∑ j = 1 i ∑ k = 1 i lcm [ gcd ⁡ ( i , j ) , gcd ⁡ ( i , k ) ] m o d    2 32 \sum_{i=1}^n \sum_{j=1}^i \sum_{k=1}^i \text{lcm}[\gcd(i,j),\gcd(i,k)] \mod 2^{32} i=1nj=1ik=1ilcm[gcd(i,j),gcd(i,k)]mod232
的值。

注意本题有 T ( 1 ≤ T ≤ 10 ) T(1\le T\le 10) T(1T10) 组读入。

17.2 解题过程

鸣谢 tangjz 的题解:https://blog.csdn.net/skywalkert/article/details/54415816

首先先对 lcm ( n , m ) \text{lcm}(n,m) lcm(n,m) 进行变换。
lcm ( n , m ) = ∑ d ∣ n , d ∣ m [ gcd ⁡ ( n , m ) = d ] n m d = ∑ d ∣ n , d ∣ m [ gcd ⁡ ( n , m ) = d ] n d m d d = ∑ d ∣ n , d ∣ m [ gcd ⁡ ( n d , m d ) = 1 ] n d m d d = ∑ d ∣ n , d ∣ m ∑ e ∣ n d , e ∣ m d μ ( e ) ⋅ e 2 ⋅ n d e m d e d \begin{aligned} \text{lcm}(n,m)&=\sum_{d|n,d|m}[\gcd(n,m)=d]\frac{nm}{d}\\ &=\sum_{d|n,d|m}[\gcd(n,m)=d]\frac{n}{d}\frac{m}{d}d\\ &=\sum_{d|n,d|m}[\gcd(\frac{n}{d},\frac{m}{d})=1]\frac{n}{d}\frac{m}{d}d\\ &=\sum_{d|n,d|m}\sum_{e|\frac{n}{d},e|\frac{m}{d}}\mu(e)\cdot e^2\cdot\frac{n}{de}\frac{m}{de}d\\ \end{aligned} lcm(n,m)=dn,dm[gcd(n,m)=d]dnm=dn,dm[gcd(n,m)=d]dndmd=dn,dm[gcd(dn,dm)=1]dndmd=dn,dmedn,edmμ(e)e2dendemd
之后对公式进行推导:
∑ i = 1 n ∑ j = 1 i ∑ k = 1 i lcm [ gcd ⁡ ( i , j ) , gcd ⁡ ( i , k ) ] = ∑ i = 1 n ∑ j = 1 i ∑ k = 1 i ∑ d 1 ∣ i ∑ d 2 ∣ i lcm ( d 1 , d 2 ) [ gcd ⁡ ( i , j ) = d 1 ] [ gcd ⁡ ( i , k ) = d 2 ] = ∑ i = 1 n ∑ d 1 ∣ i ∑ d 2 ∣ i lcm ( d 1 , d 2 ) ∑ j = 1 i [ gcd ⁡ ( i , j ) = d 1 ] ∑ k = 1 i [ gcd ⁡ ( i , k ) = d 2 ] = ∑ i = 1 n ∑ d 1 ∣ i ∑ d 2 ∣ i lcm ( d 1 , d 2 ) φ ( i d 1 ) φ ( i d 2 ) = ∑ i = 1 n ∑ d 1 ∣ i ∑ d 2 ∣ i ∑ d ∣ d 1 , d ∣ d 2 ∑ e ∣ d 1 d , e ∣ d 2 d μ ( e ) ⋅ e 2 ⋅ d 1 d e d 2 d e d φ ( i d 1 ) φ ( i d 2 ) = ∑ i = 1 n ∑ d 1 ∣ i ∑ d 2 ∣ i ∑ d ∣ d 1 , d ∣ d 2 ∑ e ∣ d 1 d , e ∣ d 2 d μ ( e ) ⋅ e 2 ⋅ d 1 d e d 2 d e d φ ( i d e d 1 d e ) φ ( i d e d 2 d e ) = ∑ i = 1 n ∑ d ∣ i ∑ e ∣ i d d ⋅ μ ( e ) ⋅ e 2 ⋅ ( ∑ d 1 d e ∣ i d e d 1 d e φ ( i d e d 1 d e ) ) = ∑ i = 1 n ∑ x y z ∣ i x μ ( y ) ⋅ y 2 ( ∑ d ∣ z d φ ( z d ) ) 2 = ∑ i = 1 n ( i d ∗ ( μ ⋅ i d 2 ) ∗ ( i d ∗ φ ) 2 ) ( i ) \begin{aligned} &\sum_{i=1}^n \sum_{j=1}^i \sum_{k=1}^i \text{lcm}[\gcd(i,j),\gcd(i,k)] \\ =&\sum_{i=1}^n \sum_{j=1}^i \sum_{k=1}^i \sum_{d_1|i} \sum_{d_2|i} \text{lcm}(d_1,d_2)[\gcd(i,j)=d_1][\gcd(i,k)=d_2]\\ =&\sum_{i=1}^n \sum_{d_1|i} \sum_{d_2|i} \text{lcm}(d_1,d_2) \sum_{j=1}^i [\gcd(i,j)=d_1] \sum_{k=1}^i [\gcd(i,k)=d_2]\\ =&\sum_{i=1}^n \sum_{d_1|i} \sum_{d_2|i} \text{lcm}(d_1,d_2) \varphi(\frac{i}{d_1}) \varphi(\frac{i}{d_2})\\ =&\sum_{i=1}^n \sum_{d_1|i} \sum_{d_2|i} \sum_{d|d_1,d|d_2}\sum_{e|\frac{d_1}{d},e|\frac{d_2}{d}}\mu(e)\cdot e^2\cdot\frac{d_1}{de}\frac{d_2}{de}d \varphi(\frac{i}{d_1}) \varphi(\frac{i}{d_2})\\ =&\sum_{i=1}^n \sum_{d_1|i} \sum_{d_2|i} \sum_{d|d_1,d|d_2}\sum_{e|\frac{d_1}{d},e|\frac{d_2}{d}}\mu(e)\cdot e^2\cdot\frac{d_1}{de}\frac{d_2}{de}d \varphi(\frac{\frac{i}{de}}{\frac{d_1}{de}}) \varphi(\frac{\frac{i}{de}}{\frac{d_2}{de}})\\ =&\sum_{i=1}^n \sum_{d|i} \sum_{e|\frac{i}{d}} d \cdot \mu(e) \cdot e^2 \cdot (\sum_{\frac{d_1}{de}|\frac{i}{de}} \frac{d_1}{de} \varphi(\frac{\frac{i}{de}}{\frac{d_1}{de}}))\\ =& \sum_{i=1}^n \sum_{xyz|i} x \mu(y) \cdot y^2 (\sum_{d|z}d\varphi(\frac{z}{d}))^2\\ =& \sum_{i=1}^n (id*(\mu\cdot id^2)*(id*\varphi)^2)(i)\\ \end{aligned} ========i=1nj=1ik=1ilcm[gcd(i,j),gcd(i,k)]i=1nj=1ik=1id1id2ilcm(d1,d2)[gcd(i,j)=d1][gcd(i,k)=d2]i=1nd1id2ilcm(d1,d2)j=1i[gcd(i,j)=d1]k=1i[gcd(i,k)=d2]i=1nd1id2ilcm(d1,d2)φ(d1i)φ(d2i)i=1nd1id2idd1,dd2edd1,edd2μ(e)e2ded1ded2dφ(d1i)φ(d2i)i=1nd1id2idd1,dd2edd1,edd2μ(e)e2ded1ded2dφ(ded1dei)φ(ded2dei)i=1ndiedidμ(e)e2(ded1deided1φ(ded1dei))i=1nxyzixμ(y)y2(dzdφ(dz))2i=1n(id(μid2)(idφ)2)(i)
g = i d ∗ ( μ ⋅ i d 2 ) g=id*(\mu\cdot id^2) g=id(μid2) h = i d ∗ φ h=id*\varphi h=idφ,则有
g ( p k ) = p k ( 1 − p ) g(p^k)=p^k(1-p) g(pk)=pk(1p)

h ( p k ) = ( k + 1 ) p k − k p k − 1 h(p^k)=(k+1)p^k-kp^{k-1} h(pk)=(k+1)pkkpk1

因此可以推出,
f ( p k ) = ( 2 k + 1 ) ( p 2 k − p 2 k − 1 ) + p k − 1 f(p^k)=(2k+1)(p^{2k}-p^{2k-1})+p^{k-1} f(pk)=(2k+1)(p2kp2k1)+pk1
通过 min_25 筛进行求和即可。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值