这篇博客记录了自己最近几个月所刷的数论函数题目,所以有些题目可能不需要用到杜教筛或者 min_25
筛。某些题需要一些乱搞的技巧。
感谢 tangjz
提供大量题目。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5608
定义:
n 2 − 3 n + 2 = ∑ d ∣ n f ( d ) n^2-3n+2=\sum_{d|n}f(d) n2−3n+2=d∣n∑f(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 T≤500 组数据, n ≤ 1 0 9 n \le 10^9 n≤109,其中不超过 5 5 5 组数据满足 n > 1 0 6 n > 10^6 n>106。
我们可以发现, ∑ d ∣ n f ( d ) = f ∗ I \sum_{d|n}f(d)=f*I ∑d∣nf(d)=f∗I,因此对于大于 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)
题目链接:http://www.51nod.com/Challenge/Problem.html#problemid=1238
给定 n ( 2 ≤ n ≤ 1 0 10 ) n(2 \le n \le 10^{10}) n(2≤n≤1010),求
∑ 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=1∑nj=1∑nlcm(i,j)mod109+7
的值。
∑ 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=1∑nj=1∑nlcm(i,j)=k=1∑nkd=1∑⌊kn⌋μ(d)⋅d2⌊kdn⌋2,l=kd=l=1∑n⌊ln⌋2d∣l∑μ(d)⋅d2⋅dl
设 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)=∑d∣lμ(d)⋅d2⋅dl,则 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} f∗id2=(μ⋅id2)∗id2∗id=(d∣l∑μ(d)⋅d2⋅d2l2)∗id=ϵ∗id=id
因此当 n ≤ 1670000 n \le 1670000 n≤1670000 时,使用线性筛预处理出 f f f 的前缀和,否则需要利用杜教筛计算 f f f 的前缀和,最后套一个数论分块即可解决本题。
需要注意的是,杜教筛外面套一个数论分块不影响总体的时间复杂度。
时间复杂度: O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)。
题目链接:http://www.51nod.com/Challenge/Problem.html#problemid=1227
定义:
A ( n ) = ∑ i = 1 n lcm ( n , i ) n A(n)=\frac{\sum_{i=1}^n \text{lcm}(n,i)}{n} A(n)=n∑i=1nlcm(n,i)
,给定 a a a 和 b ( 1 ≤ a ≤ b ≤ 1 0 9 ) b(1 \le a \le b \le 10^9) b(1≤a≤b≤109),求
∑ i = a b A ( i ) m o d 1 0 9 + 7 \sum_{i=a}^bA(i) \mod 10^9+7 i=a∑bA(i)mod109+7
的值。
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=1∑nnlcm(n,i)=i=1∑nn⋅gcd(i,n)ni=i=1∑ngcd(i,n)i=k=1∑ni=1∑nki[gcd(i,n)=k]=k∣n∑i=1∑kni[gcd(kn,i)=1]=k∣n∑2kn⋅φ(kn)+[kn=1]=2(∑k∣nφ(k)⋅k)+1
设 f ( n ) = ∑ k ∣ n φ ( k ) ⋅ k f(n)=\sum_{k|n}\varphi(k)\cdot k f(n)=∑k∣nφ(k)⋅k,则 n ≤ 1 0 6 n \le 10^6 n≤106 时,可以通过线性筛预处理出前缀和;
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} f∗id=(φ⋅id)∗I∗id=(φ⋅id)∗id∗I=id2∗I=d∣n∑d2
根据杜教筛的时间复杂度,我们最多在 O ( n ) O(\sqrt n) O(n) 以内的时间复杂度内求出 f ∗ i d f*id f∗id 的前缀和:
∑ 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=1∑n(f∗id)(i)=i=1∑nd∣i∑d2=d=1∑nd2i=1∑⌊dn⌋1=d=1∑nd2⌊dn⌋
,至此,我们便可通过杜教筛求出 f ∗ i d f*id f∗id 后面项的前缀和,时间复杂度为 O ( n 2 3 ) O(n^\frac{2}{3}) O(n32)。
题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1222
定义 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(1≤a≤b≤1011),求
∑ i = a b f ( i ) \sum_{i=a}^b f(i) i=a∑bf(i)
的值。
我们只需考虑 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(a−1) 求出答案。
∑ 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=1∑nf(i)=i=1∑nj=1∑n[lcm(i,j)≤n]=i=1∑nj=1∑n[gcd(i,j)ij≤n]=k=1∑ni=1∑nj=1∑n[kij≤n][gcd(i,j)=k]=k=1∑ni=1∑⌊kn⌋j=1∑⌊kn⌋[ijk≤n][gcd(i,j)=1]=k=1∑nd=1∑⌊kn⌋μ(d)i=1∑⌊kdn⌋j=1∑⌊kdn⌋[ijk≤⌊d2n⌋]=d=1∑nμ(d)k=1∑⌊d2n⌋i=1∑⌊kd2n⌋j=1∑⌊ikd2n⌋[ijk≤⌊d2n⌋]
设 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=1n∑i=1⌊kn⌋∑j=1⌊ikn⌋[ijk≤n],则我们可以通过枚举 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 k≤i≤j,其中 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=1nT1(d2n))=O(n32)。
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4176
给定 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \le n \le 10^9) n(1≤n≤109),求
∑ 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=1∑nj=1∑nd(ij)mod109+7
的值。
我们首先需要知道一个结论:
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)=i∣n∑j∣m∑[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=1∑nj=1∑nd(ij)=i=1∑nj=1∑na∣i∑b∣j∑[gcd(a,b)=1]=i=1∑nj=1∑na∣i∑b∣j∑d=1∑nμ(d)[d∣i][d∣j]=d=1∑nμ(d)i=1∑⌊dn⌋j=1∑⌊dn⌋a∣i∑b∣j∑1=d=1∑nμ(d)a=1∑⌊dn⌋b=1∑⌊dn⌋i=1∑⌊dan⌋j=1∑⌊dbn⌋1=d=1∑nμ(d)(a=1∑⌊dn⌋⌊dan⌋)2
杜教筛 + 数论分块即可,时间复杂度为 O ( n 3 4 ) O(n^\frac{3}{4}) O(n43)。
题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1584
给定 n ( 1 ≤ n ≤ 1 0 6 ) n(1 \le n \le 10^6) n(1≤n≤106),求
∑ 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=1∑nj=1∑nmax(i,j)⋅σ(ij)mod109+7
的值。
注意本题有 T ( 1 ≤ T ≤ 5 ⋅ 1 0 4 ) T(1 \le T \le 5 \cdot 10^4) T(1≤T≤5⋅104) 组读入。
鸣谢 tangjz
和 Candy?
的题解: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=1∑n[k≤i or k≤j]=n−k=1∑n[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=1∑nj=1∑nmax(i,j)⋅σ(ij)i=1∑nj=1∑n(n−k=1∑n[k>i][k>j]))⋅σ(ij)n⋅i=1∑nj=1∑nσ(ij)−k=1∑ni=1∑k−1j=1∑k−1σ(ij)n⋅f(n)−k=1∑nf(k−1)
而
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=1∑nj=1∑nσ(ij)=i=1∑nj=1∑na∣i∑b∣j∑a⋅bj[gcd(a,b)=1]=d=1∑nμ(d)⋅di=1∑⌊n/d⌋j=1∑⌊n/d⌋a∣i∑ab∣j∑b=d=1∑nμ(d)⋅d⋅(i=1∑⌊n/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) 查询。
题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827369985
定义 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)=∑d∣nf(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} 1≤n≤1012。
鸣谢 tangjz
的题解:https://blog.csdn.net/skywalkert/article/details/50505260
设 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=p1k1p2k2⋯pmkm,则显然 rad ( n ) = p 1 p 2 ⋯ p m \text{rad}(n)=p_1 p_2 \cdots p_m rad(n)=p1p2⋯pm,因此 rad ( n ) \text{rad}(n) rad(n) 为积性函数。
设 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) 为积性函数。
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=1∏mj=0∑kmf(pij)=i=1∏m(1+pi+pi(pi−1)+pi2(pi−1)+⋯)=i=1∏m(1+pikm)=i=1∑nj=1∑n[ij=n][gcd(i,j)=1]⋅i
∑ 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=1∑ng(k)=k=1∑ni=1∑nj=1∑n[ij=n][gcd(i,j)=1]⋅i=i=1∑nj=1∑n[ij≤n][gcd(i,j)=1]⋅i=i=1∑nij=1∑n[ij≤n]d=1∑min(i,j)μ(d)[d∣i][d∣j]=d=1∑nμ(d)i=1∑⌊d2n⌋dij=1∑⌊d2in⌋1=d=1∑nμ(d)⋅di=1∑⌊d2n⌋ij=1∑⌊d2in⌋1
暴力枚举 d d d,并通过数论分块计算内层求和即可。
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3512
求
∑ i = 1 n ∑ j = 1 m φ ( i j ) \sum_{i=1}^n \sum_{j=1}^m \varphi(ij) i=1∑nj=1∑mφ(ij)
的值,其中 n ≤ 1 0 5 , m ≤ 1 0 9 n \le 10^5,m \le 10^9 n≤105,m≤109。
鸣谢 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=1∑mφ(ni)=yi=1∑mφ(xi)=yi=1∑mφ(gcd(x,i)x)⋅φ(i)⋅gcd(x,i)=yi=1∑mφ(gcd(x,i)x)⋅φ(i)d∣gcd(x,i)∑φ(d)=yi=1∑mφ(i)d∣gcd(x,i)∑φ(dx)=yi=1∑mφ(i)d∣x,d∣i∑φ(dx)=yd∣x∑φ(dx)i=1∑⌊dw⌋φ(di)=yd∣x∑φ(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(n⋅m+n32)。
题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1847
定义 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=1∑nj=1∑n(sgcd(i,j))k
的值,其中 1 ≤ n ≤ 1 0 9 , 1 ≤ k ≤ 50 1 \le n \le 10^9,1 \le k \le 50 1≤n≤109,1≤k≤50。
鸣谢 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=1∑nj=1∑n(sgcd(i,j))k=i=1∑nj=1∑nf(gcd(i,j))k=l=1∑ni=1∑nj=1∑nf(l)k[gcd(i,j)=l]=l=1∑nf(l)k(2j=1∑⌊in⌋φ(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,j−1),pj2>ng(n,j−1)−pjk[g(⌊pjn⌋,j−1)−∑i=1j−1pik],pj2≤n
我们可以发现 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⌋,j−1)−∑i=1j−1pik 的含义是最小质因子为 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⌋,j−1)−∑i=1j−1pik 贡献到 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)
题目链接:http://spoj.com/problems/DIVCNT2
给定 n ( 1 ≤ n ≤ 1 0 12 ) n(1 \le n \le 10^{12}) n(1≤n≤1012),求
∑ i = 1 n d ( i 2 ) \sum_{i=1}^n d(i^2) i=1∑nd(i2)
的值。
鸣谢 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=p1k1p2k2⋯pmkm,则 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=p12k1p22k2⋯pm2km。
我们需要考虑在 n 2 n^2 n2 中存在,但在 n n n 中不存在的因子。
对于任意 d ∣ n d|n d∣n,考虑其质因子 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)=d∣n∑2w(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)=∑d∣nμ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)=d∣n∑2w(d)=d∣n∑e∣d∑μ2(e)=(μ2∗1)∗1=μ2∗(1∗1)=μ2∗d
因此有
∑ 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=1∑nd(i2)=i=1∑n(μ2∗d)(n)=i=1∑ne∣i∑μ2(e)⋅d(ei)=e=1∑nμ2(e)i=1∑⌊en⌋d(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=1∑nμ2(i)=i2∣n∑μ(i)=i=1∑nμ(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=1∑nd(i)=i=1∑n⌊in⌋
因此,参考杜教筛的时间复杂度证明,我们可以预处理出 μ 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
筛的做法,因其过于简单,这里不再赘述。
题目链接:http://spoj.com/problems/DIVCNTK
给定 n , k ( 1 ≤ n , k ≤ 1 0 10 ) n,k(1 \le n,k \le 10^{10}) n,k(1≤n,k≤1010),求
∑ i = 1 n d ( i k ) m o d 2 64 \sum_{i=1}^n d(i^k) \mod 2^{64} i=1∑nd(ik)mod264
的值。
设 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=p1l1p2l2⋯pmlm,则 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=p1kl1p2kl2⋯pmklm。
设 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)。
http://www.51nod.com/Challenge/Problem.html#problemId=1594
给定 n ( 1 ≤ n ≤ 2 ⋅ 1 0 6 ) n(1 \le n \le 2 \cdot 10^6) n(1≤n≤2⋅106),求
∑ i = 1 n ∑ j = 1 n φ ( gcd ( φ ( i ) , φ ( j ) ) ) \sum_{i=1}^n \sum_{j=1}^n \varphi(\gcd(\varphi(i),\varphi(j))) i=1∑nj=1∑nφ(gcd(φ(i),φ(j)))
的值。
本题需要从计数的角度,对原式进行变换。
设 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=1∑nj=1∑nφ(gcd(φ(i),φ(j)))i=1∑nj=1∑nφ(gcd(i,j))⋅g(i)g(j)k=1∑nφ(k)i=1∑nj=1∑ng(i)g(j)[gcd(i,j)=k]k=1∑nφ(k)(i=1∑⌊kn⌋g(ki))2d=1∑⌊kn⌋μ(d)[d∣i][d∣j]k=1∑nφ(k)d=1∑⌊kn⌋μ(d)(i=1∑⌊kdn⌋g(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=1⌊kdn⌋g(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,求和即可。
题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=2026
定义 f ( n ) = ∑ d ∣ n μ ( d ) ⋅ d f(n)=\sum_{d|n}\mu(d)\cdot d f(n)=∑d∣nμ(d)⋅d,给定 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \le n \le 10^9) n(1≤n≤109),求
∑ 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=1∑nj=1∑nf(gcd(i,j))⋅f(lcm(i,j))mod109+7
的值。
显然 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=1∑nj=1∑nf(i)f(j)=(i=1∑nf(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 f∗id=(μ⋅id)∗id∗I=I
因此 f f f 的前缀和可以线性筛 + 杜教筛求出,时间复杂度为 O ( n 2 3 ) O(n ^ {\frac{2}{3}}) O(n32)。
题目链接:https://www.luogu.org/problem/P5221
给定 n ( 1 ≤ n ≤ 1 0 6 ) n(1 \le n \le 10^6) n(1≤n≤106),求
∏ 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=1∏nj=1∏ngcd(i,j)lcm(i,j)mod104857601
的值。
鸣谢 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=1∏nj=1∏ngcd(i,j)lcm(i,j)i=1∏nj=1∏ngcd2(i,j)ij(i=1∏nj=1∏nij)⋅(i=1∏nj=1∏ngcd(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=1∏nj=1∏niji=1∏n(in⋅n!)(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=1∏nj=1∏ngcd(i,j)d=1∏nd∑i=1n∑j=1n[gcd(i,j)=d]d=1∏nd(2∑i=1⌊n/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)。
题目链接:https://www.luogu.org/problem/P3172
给定整数 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(1≤n,k≤109,1≤l≤h≤109,h−l≤105),从区间 [ l , h ] [l,h] [l,h] 中选取 n n n 个整数(可以重复选取),问最大公约数恰好为 k k k 的选取方案有多少个。
答案对 1 0 9 + 7 10^9+7 109+7 取模。
根据题意,实际上我们要求的是下面式子的值:
∑ 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=l∑ha2=l∑h⋯an=l∑h[gcd(a1,a2,⋯,an)=k]d=1∑⌊h/k⌋μ(d)⋅(⌊dkh⌋−⌊dkl−1⌋)n
预处理 ⌊ h d k ⌋ − ⌊ l − 1 d k ⌋ \lfloor \frac{h}{dk} \rfloor-\lfloor \frac{l-1}{dk} \rfloor ⌊dkh⌋−⌊dkl−1⌋ 的幂次,之后分段整除分块 + 杜教筛即可。
题目链接:https://www.luogu.org/problem/P4844
给定 n ( 1 ≤ n ≤ 1 0 12 ) n(1 \le n \le 10^{12}) n(1≤n≤1012),求满足下列条件的三元组 ( a , b , c ) ( a , b , c ≤ n ) (a,b,c)(a,b,c \le n) (a,b,c)(a,b,c≤n) 的个数:
鸣谢 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 ab−ac−bc+c2=c2。
因式分解后得到 c 2 = ( a − c ) ( b − c ) c^2=(a-c)(b-c) c2=(a−c)(b−c)。
设 a − c = k x 2 a-c=kx^2 a−c=kx2, b − c = k y 2 b-c=ky^2 b−c=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 a−c=x2, b − c − y 2 b-c-y^2 b−c−y2, 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(a−c,b−c)=1。
设 x ∈ [ 1 , a − c ] x \in [1, \sqrt{a-c}] x∈[1,a−c],当 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,c≤n,我们从此入手。
(1) 根据 c ≤ n c \le n c≤n 以及 x y = c xy=c xy=c,可知 y = c x ≤ n x y=\frac{c}{x}\le\frac{n}{x} y=xc≤xn。
(2) 根据 a ≤ n a \le n a≤n 以及 a − c = x 2 a-c=x^2 a−c=x2,可知 a = x 2 + c = x 2 + x y ≤ n a=x^2+c=x^2+xy\le n a=x2+c=x2+xy≤n,解出 y ≤ n − x 2 x y \le \frac{n-x^2}{x} y≤xn−x2。
(3) 根据 b ≤ n b \le n b≤n 以及 b − c = y 2 b-c=y^2 b−c=y2,可知 y 2 + x y = b ≤ n y^2+xy=b\le n y2+xy=b≤n,解出 0 < y ≤ − x 2 + n + x 2 4 0 < y \le -\frac{x}{2}+\sqrt{n+\frac{x^2}{4}} 0<y≤−2x+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(xn−x2,−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],我们将内层循环单独拿出来计算: