首页 > 其他分享 >2024 年春节集训 _ 第三课 - 莫比乌斯反演

2024 年春节集训 _ 第三课 - 莫比乌斯反演

时间:2024-03-09 23:12:21浏览次数:35  
标签:prime right dfrac sum 2024 反演 1ll 第三课 left

练习 \(5\) \(\color{orange}{\texttt{E -> link}}\)

\[\sum _{i=1} ^n \sum _{j=1} ^m lcm(i,j) \]

\(n,m \leq 10^7 ,\ T\leq 10^4\)

贴个照片。

及其丑陋的照片(我的草稿)

如上化简最后可以得到

\[\sum _{d=1} ^n d\sum_{k=1} ^{\left[\dfrac{n}{d}\right]} \mu(k)k^2 \sum_{i=1} ^{\left[\dfrac{n}{dk}\right]} i \sum_{j=1} ^{\left[\dfrac{m}{dk}\right]} j \]

好了然后注意到后面的是等差序列,可以丢尽分块处理,所以考虑 设 \(T=dk, f(x)=\dfrac{x(x+1)}{2}\)

代入进去得到:

\[\sum _{d=1} ^n d\sum_{k=1} ^{\left[\dfrac{n}{d}\right]} \mu(k)k^2 f(\left[ \dfrac{n}{T}\right])f(\left[ \dfrac{m}{T}\right]) \ \]

把后面两个 \(f\) 往前面扔。枚举 \(T.\) 就像之前 \(cbh\) 同学往前枚举 \(pd\) 是同样的道理。得到

\[\sum_{T=1}^{n} f(\left[ \dfrac{n}{T}\right])f(\left[ \dfrac{m}{T}\right]) \sum_{d|T} d\mu(d) T \]

设 \(F(T) = \sum_{d|T} d\mu(d) T.\)

那么原式就可以直接暴力二维整除分块了。

至于 \(F\) 函数在 \(\texttt{Euler}\) 筛法中处理。详见程式。

程式
#include <bits/stdc++.h>
#define ll long long

using namespace std;
const ll N = 1e7 + 5, mod = 1e8 + 9;
int f[N], prime[N / 10];
ll s[N];
bitset<N> vis;
int top, t, n, m;
inline void sieve(void) {
    vis[1] = s[1] = f[1] = 1;
    for (int i = 2; i < N; ++i) {
        if (!vis[i])
            vis[i] = true, prime[++top] = i, f[i] = 1 - i;
        for (int j = 1; j <= top; ++j) {
            if (1ll * i * prime[j] > N)
                break;
            vis[1ll * i * prime[j]] = 1;
            if (!(1ll * i % prime[j])) {
                f[1ll * i * prime[j]] = f[i];
                break;
            }
            f[1ll * i * prime[j]] = 1ll * f[i] * f[prime[j]] % mod;
        }
        s[i] = s[i - 1] + 1ll * f[i] * i, f[i] %= mod, s[i] %= mod;
    }
    return;
}
inline ll func(int x) { return 1ll * x * (x + 1) / 2 % mod; }
inline ll calc(void) {
    ll lt = 1, rt = 1, ans = 0;
    for (lt = 1; lt <= min(n, m); lt = rt + 1) {
        rt = min(n / (n / lt), m / (m / lt));
        (ans += 1ll * func(n / lt) % mod * func(m / lt) % mod * (s[rt] - s[lt - 1]) % mod + mod) % mod;
    }
    return ans % mod;
}
int main() {
    scanf("%d", &t);
    sieve();
    while (t--) {
        scanf("%d%d", &n, &m);
        if (n > m)
            swap(n, m);
        printf("%lld\n", calc());
    }
    return 0;
}
// 1 29 47

标签:prime,right,dfrac,sum,2024,反演,1ll,第三课,left
From: https://www.cnblogs.com/chihirofujisaki/p/18063571

相关文章

  • 20240309
    瑞士轮思路:快排会g,所以要归并排序defineintlonglong会g,关掉快排函数:stable_sort,用法和sort一样#include<bits/stdc++.h>usingnamespacestd;//#defineintlonglongstructinf{intscore;intid;intforce;};boolcmp(infa,infb){if......
  • 2024Windows11专业版产品永久密钥
    Windows11专业版是Windows11操作系统的商业版本,面向中小型企业和技术爱好者。它在Windows11家庭版的基础上增加了许多功能,可帮助企业和个人提高工作效率和安全性。主要功能:**加入域和AzureAD:**可将设备加入到ActiveDirectory域或AzureAD中,以便进行集中管理......
  • 2024Windows11专业工作站版产品永久密钥
    Windows11专业工作站版是Windows11操作系统的专门版本,面向需要更高性能、可靠性和安全性的大型企业和专业人士。它在Windows11专业版的基础上增加了许多功能,可帮助用户更有效地完成工作。主要功能:**更高的性能:**支持最多4个CPU和6TB内存,可满足苛刻应用程序的......
  • P10238 [yLCPC2024] F. PANDORA PARADOXXX 题解
    分析考虑时光倒流。对于需要合并的两个连通块\(x,y\),其合并之后的最远点对距离一定是合并之前的两组点对中产生的。在合并的时候枚举点对,取距离最大值即可。由于我们是倒着来的,所有连通块的最远点对距离最大值不减,所以能直接在合并之后取最大值。维护连通块用并查集即可。复杂......
  • P10237 [yLCPC2024] E. Latent Kindom 题解
    分析一眼了非最优解。考虑二分答案。对于二分出来的中位数\(x\),到\(a_i\)和\(a_j\)里边又去二分。得到两个序列中不超过\(x\)的数的数量。若这个数量\(cnt\ge\lceil\frac{len_{i}+len_{j}}{2}\rceil\),则\(x\)可能成为中位数,然后继续二分即可。把序列离散化,复杂度......
  • 2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右的次序从 0 开始编号, 每个栈
    2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右的次序从0开始编号,每个栈的的最大容量capacity都相同。实现一个叫「餐盘」的类DinnerPlates,DinnerPlates(intcapacity)-给出栈的最大容量capacity,voidpush(intval)将给出的正整数val推入从左往右第一个......
  • CVE-2024-20931【复现】
    漏洞编号:CVE-2024-20931一、环境准备:1台Windows主机(10.46.47.227)作为攻击机|1台centos虚拟机(192.168.172.172)作为目标机|虚拟机网络模式为nat二、搭建漏洞环境1、docker拉取镜像1.1dockerpullismaleiva90/weblogic12|我已先完成(截图丢失),大概4~5g,拉取问题:国内镜像证......
  • 2024-3-9
    睡一上午觉,下午不想去图书馆了,在寝室半学半玩,主要是写作业,作业太多了今日夜景......
  • [联合省选 2024] 季风
    首先我们不难发现,原题意等价于求最小的\(m\)使得\(|x-\sum_{i=0}^{m-1}x_{i\bmodn}|+|y-\sum_{i=0}^{m-1}y_{i\bmodn}|\lem\cdotk\),因为你可以把较大的\(x'_i,y'_i\)匀出一点给较小的\(x'_i,y'_i\),使得所有\(|x'_i|+|y'_i|\lek\)都满足,而不会影响结果。考虑枚举\(i......
  • pkuwc2024
    牛牛牛啊,可以去省外旅游咯!day0由于神秘原因,很晚才到重庆,但是两个育才老哥非常的热情啊,请我吃了顿饭,嘎嘎舒服。然后也没发生啥,就睡大觉了。day1不愧是山城,走了好一会才到现场,听了会开营仪式,非常的简短,好评!拍了张大合照就去试机了。到场地比较早,偷偷的看了看周围哥们的名字。......