AT_agc038_c 做题笔记

题目链接

莫反好题,不仅仅是莫反,还有很多思维含量。

由于推式子过程太过于漫长了,所以我仅仅讲下大概。

题目是给你一个长度为 n 的数组,请求出 i=1nj=i+1nlcm(Ai,Aj)

莫反通常是对于值域考虑,直接推是不可行的,所以开一个桶 bbk 存储 Ai=k 的个数。

对值域分类的话就只能把忽略大小关系的 i j 对算出来后再容斥得到答案,即:

i=1Vj=1Vlcm(i,j)bibj

多说一句,我刚开始没忽略大小关系,是 i=1Vj=i+1Vlcm(i,j)bibj,但这个实际上是错的,我当时没注意,推到最后发现没办法推了才想到这个办法的。。。

推式子,大概就是先把 lcm 变成相乘除以最大公约数之后枚举最大公约数,然后再同时除以最大公约数,然后再用莫比乌斯反演之后再枚举。

此时有一个整除的条件,枚举的时候枚举倍数就行了,最后把所有 内的能拿出来的都拿出来,用乘法分配律拿。

推完后是:d=1V(dx=1Vd(μ(x)x2i=1Vdxibidxj=1Vdxjbjdx)

此时令 f(x)=i=1Vxibix,然后就可以化为 d=1V(dx=1Vd(μ(x)x2f2(dx)))

f 进行预处理,然后调和级数 nlogn 就可求得,注意最后要除以二,用逆元,还有减去 i=1nai,因为我们多算了要容斥掉。

代码:

复制代码
#include <bits/stdc++.h>
#define int long long
#define For(i, a, b) for (int i = (a); i <= (b); i ++)
#define foR(i, a, b) for (int i = (a); i >= (b); i --)
using namespace std;
int n, x, ans, cnt;
int b[1000005], f[1000005];
int mu[1000005], primes[200005];
bool prime[1000005];
const int mod = 998244353;
void init () {
    mu[1] = 1;
    For (i, 2, 1000000) {
        if (!prime[i]) {
            primes[++ cnt] = i;
            mu[i] = -1;
        }
        for (int j = 1; j <= cnt && i * primes[j] <= 1000000; j ++) {
            prime[i * primes[j] ] = 1;
            if (i % primes[j] == 0) break;
            mu[i * primes[j] ] = -mu[i];
        }
    }
}
void solve () {
    init ();
    cin >> n;
    For (i, 1, n) {
        cin >> x;
        ans -= x;
        ++ b[x];
    }
    ans = (ans % mod + mod) % mod;
    For (i, 1, 1000000) {
        For (j, 1, 1000000 / i) f[i] += j * b[i * j];
        f[i] %= mod;
    }
    For (i, 1, 1000000) {
        int x = 1000000 / i, res = 0;
        For (j, 1, x) {
            res += mu[j] * j * j % mod * f[i * j] % mod * f[i * j] % mod;
            if (res >= mod) res -= mod;
            if (res <= mod) res += mod;
        }
        ans += i * res % mod;
        if (ans >= mod) ans -= mod;
    }
    cout << ans * 499122177 % mod;
}
signed main () {
    int _ = 1;
//    cin >> _;
    while (_ --) {
        solve ();
        cout << '\n';
    }
    return 0;
}
复制代码

 

posted @   Xy_top  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示