莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
传送门
题解:
简直完美<(▰˘◡˘▰)>
对于求约数个数,可以参看这一篇blog
除了线性筛,可以O(n√n)求(网上很多博客中就是这么做的),不过有更快的方法,代码复杂度又不高,为啥不用(ง •̀_•́)ง。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=5e4+5;
int n,m,prime[MAXN],vis[MAXN],mu[MAXN],d[MAXN],t[MAXN],tot=0;
ll ans;
inline int read() {int x=0;char c=getchar();while (c<'0'||c>'9') c=getchar();while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();return x;
}
inline void linear_shaker() {memset(vis,0,sizeof(vis));d[1]=1,t[1]=0,mu[1]=1;for (register int i=2;i<MAXN;++i) {if (!vis[i]) prime[++tot]=i,d[i]=2,t[i]=1,mu[i]=-1;for (int j=1;j<=tot&&i*prime[j]<MAXN;++j) {vis[i*prime[j]]=true;if (i%prime[j]==0) {mu[i*prime[j]]=0;d[i*prime[j]]=d[i]/(t[i]+1)*(t[i]+2);t[i*prime[j]]=t[i]+1;break;}mu[i*prime[j]]=-mu[i];d[i*prime[j]]=d[i]<<1;t[i*prime[j]]=1;}}for (register int i=2;i<MAXN;++i) d[i]+=d[i-1],mu[i]+=mu[i-1];
}
int main() {int kase=read();linear_shaker();while (kase--) {n=read(),m=read();int last=0,t=min(n,m);ll ans=0;for (int i=1;i<=t;i=last+1) {last=min(n/(n/i),m/(m/i));ans+=1ll*(mu[last]-mu[i-1])*d[n/i]*d[m/i];}printf("%lld\n",ans);}return 0;
}
莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)相关推荐
- bzoj 3994 约数个数和 —— 反演+数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994 推导过程和这里一样:https://www.cnblogs.com/MashiroSk ...
- P3327 [SDOI2015]约数个数和 (mobius反演)
P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n∑j=1md(ij ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」
题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...
- SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...
- 数学:莫比乌斯反演-约数个数和
BZOJ3994:利用莫比乌斯反演求约数个数和 解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导 很麻烦 1 #include<cstdio> 2 #inclu ...
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
题目描述 设d(x)为x的约数个数,给定N.M,求 输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...
- bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...
- [SDOI2015]约数个数和【莫比乌斯反演】
[SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...
最新文章
- 十三、linux编程中目录IO常用编程函数
- SAP Analytics Cloud导入数据的规模限制
- 贝壳“进社区”,让商业向文明靠拢
- 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!
- bus error的解决方法
- 王选:从Dijkstra谈帅才的洞察力
- PHPStudy环境下phpmyadmin卡顿延迟不流畅解决办法
- Mastering the game of Go with deep neural networks and tree search翻译
- 文献解读 | m6A——程序性细胞死亡与癌症的“双刃剑”
- 目标检测:Faster-RCNN与YOLO V3模型的对比分析
- Redis知识点整理
- SPDR年内增量尽数被抹 市场看空金市
- 学科综合 | 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
- vfp 连接mysql数据库_VFP与SQL远程异构数据库_mysql
- 64位windows10安装Sql server 2000
- 学习 PySOT(2)(PySOT-toolkit、对比、画图)
- 大学计算机基础完整性约束,大一大学计算机基础题库含12份
- 分享一个自律的小故事
- 7z 头部错误 数据错误_简单的方法来修复损坏的7Zip的文件
- js表单全选和取消全选
热门文章
- Python中 5个非常有用的单行代码
- 华农软件工程实验报告_华南农业大学软件工程大一课程表
- Dubbo-04 20190317
- Centos6.9 下的 CM(Cloudera Manager)CDH 大数据环境部署
- DeepNet :Scaling Transformers to 1000 Layer
- Dart的mixin详解
- 服务器2012还原系统,Windows Server 2012如何进行系统映像还原
- 机器学习入门——鸢尾花问题
- android 8 奕骆,为耐而生的手机 Innos奕骆D6000评测
- java遍历excel 表格