[2021CCPC威海热身赛] Number Theory (打表 推公式)
作者:互联网
题意
求
∑ k = 1 n ∑ i ∣ k ∑ j ∣ i λ ( i ) λ ( j ) \sum_{k = 1}^{n}\sum_{i \mid k} \sum_{j \mid i} \lambda(i) \lambda(j) k=1∑ni∣k∑j∣i∑λ(i)λ(j)
对 998244353 998244353 998244353 取模
其中 λ ( x ) = ( − 1 ) ∑ i e i , x = ∏ i p i e i \lambda(x) = (-1)^{\sum\limits_{i}e_i},x=\prod\limits_{i}p_i^{e_i} λ(x)=(−1)i∑ei,x=i∏piei
分析:
λ ( x ) \lambda(x) λ(x) 为刘维尔函数,可以打表发现 ∑ d ∣ n λ ( d ) = [ n = a 2 , a ∈ N + ] \sum_{d \mid n}\lambda(d) =[n = a^2,a \in N^+] d∣n∑λ(d)=[n=a2,a∈N+]
也就是 n n n 是否为完全平方数
把式子中的 λ ( i ) \lambda(i) λ(i) 提到前面
∑ k = 1 n ∑ i ∣ k λ ( i ) ∑ j ∣ i λ ( j ) \sum_{k = 1}^{n}\sum_{i \mid k} \lambda(i)\sum_{j \mid i} \lambda(j) k=1∑ni∣k∑λ(i)j∣i∑λ(j)
那么就变为
∑ k = 1 n ∑ i ∣ k λ ( i ) [ i = a 2 , a ∈ N + ] \sum_{k = 1}^{n}\sum_{i \mid k} \lambda(i)[i= a^2,a \in N^+] k=1∑ni∣k∑λ(i)[i=a2,a∈N+]
那么完全平方数的刘维尔函数为 1 1 1,再设 f ( x ) = [ i = a 2 , a ∈ N + ] f(x)=[i= a^2,a \in N^+] f(x)=[i=a2,a∈N+] 得
∑ i = 1 n ∑ d ∣ n f ( d ) \sum_{i = 1}^{n}\sum_{d \mid n}f(d) i=1∑nd∣n∑f(d)
交换求和次序
∑ d = 1 n f ( d ) ⌊ n d ⌋ \sum_{d = 1}^{n}f(d) \lfloor\frac{n}{d}\rfloor d=1∑nf(d)⌊dn⌋
这样直接枚举平方数即可,时间复杂度 O ( n ) O(\sqrt{n}) O(n )
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int n, res;
signed main() {
cin >> n;
for (int i = 1; i * i <= n; i ++) {
res = (res + n / (i * i)) % mod;
}
cout << res << endl;
}
标签:Theory,int,res,sum,mid,Number,2021CCPC,998244353,lambda 来源: https://blog.csdn.net/messywind/article/details/121443594