【BZOJ3994】约数个数和(莫比乌斯反演)
【BZOJ3994】约数个数和(莫比乌斯反演)
题面
求$$\sum_{i=1}n\sum_{j=1}md(ij)$$
多组数据\((<=50000组)\)
\(n,m<=50000\)
其中\(d(x)\)是\(x\)的约数个数
题解
orz ZSY 巨佬
根据玄学(我也不知道为什么)的公式
\]
所以,所求等于
\]
把枚举因数丢到前面去
\]
\(u,v\)看起来很不爽
\]
看起来可以莫比乌斯反演一波了
设
\]
\]
所以
\]
把\(x\)提出去,忽略\(gcd\)的影响
\]
预处理出\(\sum_{i=1}^n[\frac{n}{i}]\)的值\(g(x)\)就可以\(O(1)\)算
预处理的方式,请参考一道水题约数研究
你就会知道这个玩意的值就是每个数约数个数的前缀和
因为一个数的约数个数是积性函数,可以线性筛
所以这个可以\(O(n)\)预处理
接下来的东西就比较好算了
所求就是\(f(1)\)
\]
把\(g(i)\)展开
\]
很明显可以数论分块
所以再预处理一下\(\mu(i)\)的前缀和就行了
单词询问的复杂度就是\(O(\sqrt n)\)
总体复杂度\(O(T\sqrt n)\)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 50000
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m;
bool zs[MAX+1000];
int pri[MAX+1000],tot,mu[MAX+1000],ys[MAX+1000],dd[MAX+1000];
int smu[MAX+1000],sd[MAX+1000];
void pre()
{
zs[1]=true;mu[1]=ys[1]=1;
for(int i=2;i<=MAX;++i)
{
if(!zs[i])pri[++tot]=i,mu[i]=-1,ys[i]=2,dd[i]=1;
for(int j=1;j<=tot&&i*pri[j]<=MAX;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0)
{
mu[i*pri[j]]=0;
ys[i*pri[j]]=ys[i]/(dd[i]+1)*(dd[i]+2);
dd[i*pri[j]]=dd[i]+1;
break;
}
else mu[i*pri[j]]=-mu[i],ys[i*pri[j]]=ys[i]*2,dd[i*pri[j]]=1;
}
}
for(int i=1;i<=MAX;++i)smu[i]=smu[i-1]+mu[i];
for(int i=1;i<=MAX;++i)sd[i]=sd[i-1]+ys[i];
}
int main()
{
pre();
int T=read();
while(T--)
{
n=read();m=read();
if(n>m)swap(n,m);
long long ans=0;
int i=1,j;
while(i<=n)
{
j=min(n/(n/i),m/(m/i));
ans+=1ll*(smu[j]-smu[i-1])*sd[n/i]*sd[m/i];
i=j+1;
}
printf("%lld\n",ans);
}
return 0;
}
【BZOJ3994】约数个数和(莫比乌斯反演)的更多相关文章
- [SDOI2015][bzoj3994] 约数个数和 [莫比乌斯反演]
题面: 传送门 思路: 首先,我们需要证明一个结论:d(i*j)等于sigma(gcd(x,y)==1),其中x为i的约数,y为j的约数 对于nm的每一个质因子pi分别考虑,设n = pi^ai + ...
- P3327 [SDOI2015]约数个数和 莫比乌斯反演
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...
- [SDOI2015][bzoj 3994][Luogu P3327] 约数个数和 (莫比乌斯反演)
题目描述 设d(x)d(x)d(x)为xxx的约数个数,给定NNN.MMM,求 ∑i=1N∑j=1Md(ij)\sum^{N}_{i=1}\sum^{M}_{j=1} d(ij)i=1∑Nj=1∑M ...
- [SDOI2015]约数个数和 莫比乌斯反演
---题面--- 题解: 为什么SDOI这么喜欢莫比乌斯反演,,, 首先有一个结论$$d(ij) = \sum_{x|i}\sum_{y|j}[gcd(x, y) == 1]$$为什么呢?首先,可以看 ...
- luogu P3327 [SDOI2015]约数个数和 莫比乌斯反演
题面 我的做法基于以下两个公式: \[[n=1]=\sum_{d|n}\mu(d)\] \[\sigma_0(i*j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\] 其中\(\ ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N∑j=1Md(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...
随机推荐
- 【Tools】ubuntu虚拟机Vmware Tools 安装记录
1.下载VmwareTools 链接: https://pan.baidu.com/s/1c4baji4 密码: h3si 2.终端打开下载文件位置 cd /home/ubuntu/Downloads ...
- 关于Frame加背景的那点事?
最近新生问我一个问题,继承自Frame(可不是继承自JFrame)的框架怎样添加背景图片, 真够坑的,当时还真懵了,废话少说直接上代码: import java.awt.*; import java. ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- Winform下去除MDI窗体边框
做项目中间遇到了MDI窗体内边框的问题,经过苦苦寻找,最终得到了解决方案 在Main窗体中调用API // Win32 Constants ; ; private const int WS_BORDE ...
- cmd命令报4048错误
解决方法: win10系统:快捷键win+x,找到命令提示符(管理员),打开再下载相应的依赖包. win7/8:打开开始,输入命令提示符,找到管理员权限的命令提示符,打开再下载相应的依赖包. 提示:如 ...
- cf B. Mishka and trip (数学)
题意 Mishka想要去一个国家旅行,这个国家共有个城市,城市通过道路形成一个环,即第i个城市和第个城市之间有一条道路,此外城市和之间有一条道路.这个城市中有个首中心城市,中心城市与每个城市(除了 ...
- nyoj886 取石子(八) 威佐夫博弈
好累,坐了一天火车, 终于到学校了. 思路:仔细观察威佐夫博弈,发现P态的所有数字都是不重复的,例如(0,0).(1,2).(3,5).(4,7).(6, 10).(8,13).(9,15).(11, ...
- JAVA在不确定具体 Annotation 类型时,获得注解参数
package com.lzw.demo; @SpringBootApplication public class DemoApplication { public static void ma ...
- Spring data mongodb 聚合,投射,内嵌数组文档分页.
尽量别直接用 DBObject ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...
- JAVA 处理 Spring data mongodb 时区问题
Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1 @JsonFormat ...