【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)
大致题意: 求\(\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\)。
推式子
不会莫比乌斯反演的可以先去看这篇博客:初学莫比乌斯反演。
反演题显然就是推式子啊~~~
考虑\(lcm\)这个东西不好做,所以我们先把它化成\(gcd\):
\]
接下来就是按照套路枚举\(gcd\)了:
\]
由于\([gcd(i,j)=1]\)这个式子不好直接搞,因此我们要进行转化。
想到\(e(n)=[n=1]\),所以这个式子就相当于\(e(gcd(i,j))\)。
而\(\mu*I=e\),所以:
\]
也就是说,原式即为:
\]
然后我们改为枚\(p\),得到:
\]
整理一下式子,调整一下顺序,得到:
\]
设\(S(n)=\sum_{i=1}^ni=\frac{n(n+1)}2\),则可得原式等于:
\]
那么我们预处理\(p^2\mu(p)\)的值,然后二维除法分块枚举\(d,p\),就可以得出答案了。
代码
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 10000000
#define X 20101009
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;
int n,m,t,f[N+5];
class LinearSiever//线性筛
{
private:
int Pt,mu[N+5],P[N+5];
public:
int F[N+5];
I void Sieve(CI S)
{
RI i,j;for(mu[1]=1,i=2;i<=S;++i)//筛mu
{
!P[i]&&(mu[P[++Pt]=i]=-1);
for(j=1;j<=Pt&&1LL*i*P[j]<=S;++j)
if(P[i*P[j]]=1,i%P[j]) mu[i*P[j]]=-mu[i];else break;
}
for(i=1;i<=S;++i) F[i]=(1LL*i*i%X*(mu[i]+X)+F[i-1])%X;//预处理p^2mu(p)
}
}L;
I int S(CI x) {return (1LL*x*(x+1)>>1)%X;}//计算从1到x的和
int main()
{
RI l,r,ll,rr,res,ans=0;scanf("%d%d",&n,&m),L.Sieve(t=min(n,m));
for(l=1;l<=t;l=r+1)//第一维除法分块
{
res=0,r=min(n/(n/l),m/(m/l));
for(ll=1;ll<=t/l;ll=rr+1) rr=min((n/l)/(n/l/ll),(m/l)/(m/l/ll)),//第二维除法分块
res=(1LL*(L.F[rr]-L.F[ll-1]+X)%X*S(n/l/ll)%X*S(m/l/ll)+res)%X;
ans=(1LL*(S(r)-S(l-1)+X)%X*res+ans)%X;//统计答案
}return printf("%d",ans),0;//输出答案
}
【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)的更多相关文章
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
传送门 式子好麻烦orz……大佬好腻害orz->这里 //minamoto #include<iostream> #include<cstdio> #define ll ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$. 开始开心(自闭)化简: $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$ =$\su ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告
[国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...
- [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】
传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...
- 洛谷P1829 [国家集训队]Crash的数字表格
题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整数.例如,LCM(6, ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
- P1829 [国家集训队]Crash的数字表格
P1829 [国家集训队]Crash的数字表格 原题传送门 前置芝士 莫比乌斯反演 乘法逆元 数论分块 正文 //补充:以下式子中的除法均为整除 由题目可以得知,这道题让我们所求的数,用一个式子来表达 ...
随机推荐
- 从应用到内核,分析top命令显示的进程名包含中括号"[]"的含义
背景 在执行top/ps命令的时候,在COMMAND一列,我们会发现,有些进程名被[]括起来了,例如 PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1542 928 ...
- Debug 路漫漫-12:Python: ValueError: 'userid' is both an index level and a column label, which is ambiguous.
啊,又遇到难题了 == 想要对两个 dataframe 做自然连接 merge,连接的key 为 “userid”,但是报错:ValueError: 'userid' is both an index ...
- set -x 与 set +x
set -x 与 set +x 在liunx脚本中可用set -x就可有详细的日志输出.免的老是要echo了 下面的网上搜来的用法. 用于脚本调试.set是把它下面的命令打印到屏幕set -x 是开启 ...
- spring-framework-core-ioc Container 笔记版本
Spring框架对于java开发人员来说是无比重要的.接触java也有3年了,接触Spring两年了.在工作中天天使用它,平时也会通过视频和书籍尝试更加的了解Spring.对于初学者来说,Spring ...
- MySQL使用crontab定时备份不执行问题
在使用crontab定时备份数据库时,发现并没有执行备份命令. 下面是定时备份的代码: 30 1 * * * /usr/local/mysql/bin/mysqldump --defaults-ext ...
- Python sorted 函数
Python sorted 函数 sorted 可以对所有可迭代的对象进行排序操作,sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作.从新排序列表. sorted 语法: ...
- DAX 第七篇:分组聚合
DAX有三个用于生成分组聚合数据的函数,这三个函数有两个共同的特征:分组列和扩展列. 分组列是用于分组的列,只能来源于基础表中已存的列,分组列可以来源于同一个表,也可以来源于相关的列. 扩展列是由na ...
- LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
题目 我是按照边进行二分的 class Solution { public: int sum[100005]; int a[305][305]; int maxSideLength(vector< ...
- C# .NET 使用 NPOI 读取 .xlsx 格式 Excel
string filePath = @"C:\Users\yangqinglin\Desktop\test.xlsx"; IWorkbook wk = null; string e ...
- Linux用户和权限——管理文件权限的命令
Linux用户和权限——管理文件权限的命令 摘要:本文主要学习了Linux中修改文件权限的命令. chown命令 chown命令,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件( ...