BZOJ 2154/2693 Crash的数字表格/jzptab (莫比乌斯反演)
题目大意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$的和
易得$\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{gcd(i,j)}$
套路1:提取出$gcd$
$\sum_{k=1}^{n}\frac{1}{k}\sum_{i=1}^{n}\sum_{j=1}^{m}ij$
$\sum_{k=1}^{n}k\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}ij$
$\sum_{k=1}^{n}k\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}\sum_{d|gcd(i,j)}\mu(d)$
套路2:继续提取$gcd$
$\sum_{k=1}^{n}k\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}[gcd(i,j)==d]ij$
$\sum_{k=1}^{n}k\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}d^{2}\sum_{i=1}^{\left \lfloor \frac{n}{kd} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{kd} \right \rfloor}ij$
$\sum_{i=1}^{\left \lfloor \frac{n}{kd} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{kd} \right \rfloor}ij$可以$O(1)$计算出来
套路3:令$Q=kd$
$\sum_{Q=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{Q} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{Q} \right \rfloor}ij\sum_{d|Q}\frac{Q}{d}(d)^{2}\mu(d)$
$\sum_{d|Q}\frac{Q}{d}(d)^{2}\mu(d)$显然是积性函数
然后问题就解决了
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10010000
#define maxn 10000000
#define ll long long
#define uint unsigned int
#define rint register int
using namespace std; int n,m,T,cnt;
int mu[N],pr[N],use[N];
int f[N],F[N];
const int mod=; void Pre()
{
mu[]=;f[]=;
for(int i=;i<=maxn;i++)
{
if(!use[i]) pr[++cnt]=i,mu[i]=-,f[i]=(1ll*i*(-i))%mod;
for(rint j=;j<=cnt&&i*pr[j]<=maxn;j++){
use[i*pr[j]]=;
if(i%pr[j]){
mu[i*pr[j]]=-mu[i];
f[i*pr[j]]=1ll*f[i]*f[pr[j]]%mod;
}else{
mu[i*pr[j]]=;
f[i*pr[j]]=1ll*f[i]*pr[j]%mod;
break;
}
}
}
for(int i=;i-<=maxn;i+=)
{
F[i+]=(1ll*F[i-]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
}
}
ll solve(int n,int m)
{
ll ans=,sn,sm;
if(n>m) swap(n,m);
for(int i=,la;i<=n;i=la+)
{
la=min(n/(n/i),m/(m/i));
sn=(1ll*(n/i)*(n/i+)/)%mod;
sm=(1ll*(m/i)*(m/i+)/)%mod;
(ans+=1ll*sn*sm%mod*(F[la]-F[i-]))%=mod;
}ans=(ans%mod+mod)%mod;
return ans;
} int main()
{
//freopen("t1.in","r",stdin);
scanf("%d",&T);
Pre();
int n,m;
while(T--)
{
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
}
return ;
}
调试部分的代码..留个纪念吧
int ps[N],son[N],d[N],num,nson;
void dfs_son(int s,int dep)
{
if(dep>num) {son[++nson]=s;return;}
for(int j=;j<=d[dep];j++)
dfs_son(s,dep+),s*=ps[dep];
}
ll g[N];
void check()
{
for(int i=;i<=maxn;i++){
int sq=sqrt(i),x=i;
num=nson=;
for(int j=;j<=cnt&&pr[j]<=sq;j++)
if(x%pr[j]==){
ps[++num]=pr[j];
while(x%pr[j]==) d[num]++,x/=pr[j];
}
if(x!=) ps[++num]=x,d[num]=;
dfs_son(,);
for(int j=;j<=nson;j++)
(g[i]+=mu[son[j]]*son[j]%mod)%=mod,
son[j]=;
g[i]=g[i]*i%mod;
for(int i=;i<=num;i++)
d[i]=;
}
}
BZOJ 2154/2693 Crash的数字表格/jzptab (莫比乌斯反演)的更多相关文章
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)
2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...
- [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
---题面--- 题解: $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$ 改成枚举d(设n < m) $$ans ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...
- luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...
- 【BZOJ2154】Crash的数字表格(莫比乌斯反演)
[BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...
- BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演
传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ...
- BZOJ2154 Crash的数字表格 【莫比乌斯反演】
BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...
随机推荐
- TF基础4
模型的存储与加载 TF的API提供了两种方式来存储和加载模型: 1.生成检查点文件,扩展名.ckpt,通过在tf.train.Saver()对象上调用Saver.save()生成.包含权重和其他在程序 ...
- java文件名与class关系
class与文件名没有必要关系但是public class是要绝对保持一致 例如:class test{ public static void main(String args[]){ System. ...
- CF #487 (Div. 2) D. A Shade of Moonlight 构造_数形结合
题意: 给 nnn个长度为 lll 且互不相交的开区间 (xi,xi+l)(x_{i}, x_{i}+l)(xi,xi+l) ,每个区间有一个移动速度 vvv,v∈1,−1v∈1,-1v∈1,−1 ...
- C# 基础复习 三 XML操作
XML 可扩展标记语言(所有标签都是自己定义,没有固定格式) 如果要给XML规定格式,可以使用dtd (dtd是什么?你不会自己百度吗) XML主要用来存储数据 XML的要求: 根节点只能有一 ...
- IOS - plist使用
//1 可读取,不可写入工程下的plist文件: // NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"O ...
- web前后端安全问题
1. 安全问题主要可以理解为以下两方面: 私密性:资源不被非法窃取和利用,只有在授权情况下才可以使用: 可靠性:资料不会丢失.损坏及篡改: 2. web安全的层面 代码层面:写代码时保证代码是安全的, ...
- 【洛谷4941】War2 状压Dp
简单的状压DP,和NOIP2017 Day2 找宝藏 代码几乎一样.(比那个稍微简单一点) f[i][j] ,i代表点的状态,j是当前选择的点,枚举上一个选到的点k 然后从f[i-(1<< ...
- HDU 2049 不容易系列之(4)——考新郎( 错排 )
链接:传送门 思路:错排水题,从N个人中选出M个人进行错排,即 C(n,m)*d[m] 补充:组合数C(n,m)能用double计算吗?第二部分有解释 Part 1. 分别求出来组合数的分子和分母然后 ...
- 一、Git起步
1.关于版本控制 版本控制系统:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.但实际上,你可以对任何类型的文件进行版本控制. 1.1 本地版本控制系统 许多人习惯用复制 ...
- thinkphp 多个字段的不同关系的查询条件实现 .
tp的$map不同条件默认是 and ,如果要用or<><><><>如下 例如查询Stu表中年龄大于18,或者身高低于180cm的男性(1为男性),(例 ...