[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=1nikjiλ(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)iei,x=ipiei

分析:

λ ( x ) \lambda(x) λ(x) 为刘维尔函数,可以打表发现 ∑ d ∣ n λ ( d ) = [ n = a 2 , a ∈ N + ] \sum_{d \mid n}\lambda(d) =[n = a^2,a \in N^+] dnλ(d)=[n=a2,aN+]

也就是 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=1nikλ(i)jiλ(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=1nikλ(i)[i=a2,aN+]

那么完全平方数的刘维尔函数为 1 1 1,再设 f ( x ) = [ i = a 2 , a ∈ N + ] f(x)=[i= a^2,a \in N^+] f(x)=[i=a2,aN+]

∑ i = 1 n ∑ d ∣ i f ( d ) \sum_{i = 1}^{n}\sum_{d \mid i}f(d) i=1ndif(d)

交换求和次序

∑ d = 1 n f ( d ) ⌊ n d ⌋ \sum_{d = 1}^{n}f(d) \lfloor\frac{n}{d}\rfloor d=1nf(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;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值