BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)
Description

Input
输入文件包含多组测试数据。
Output
T行,每行一个整数,表示你所求的答案。
Sample Input
7 4
5 6
Sample Output
121
解题思路:
有一个喜闻乐见的结论:
${\sum_{i=1}^{n}}{\sum_{j=1}^{m}}{d(i*j)]}={\sum_{i=1}^{n}}{\sum_{j=1}^{m}}[gcd(i,j)==1]{\left \lfloor \frac{N}{i} \right \rfloor}{\left \lfloor \frac{M}{j} \right \rfloor}$
剩下的大家都会了吧QAQ
代码:
- #include<map>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- const int N=;
- struct lnt{
- std::map<unsigned int,long long>Arr;
- long long arr[N];
- bool has[N];
- void Insert(unsigned int x,long long y)
- {
- if(x<N)
- arr[x]=y,has[x]=true;
- else
- Arr[x]=y;
- }
- bool find(unsigned int x)
- {
- if(x<N)
- return has[x];
- else
- return Arr.find(x)!=Arr.end();
- }
- long long val(unsigned int pos)
- {
- if(pos<N)
- return arr[pos];
- return Arr[pos];
- }
- };
- unsigned int prime[N];
- int phi[N];
- int miu[N];
- bool vis[N];
- unsigned int cnt;
- lnt Sum_phi;
- lnt Sum_miu;
- void gtp(void)
- {
- miu[]=phi[]=;
- Sum_phi.Insert(,);
- Sum_miu.Insert(,);
- for(int i=;i<N;i++)
- {
- if(!vis[i])
- {
- prime[++cnt]=i;
- miu[i]=-;
- phi[i]=i-;
- }
- for(int j=;j<=cnt&&i*prime[j]<N;j++)
- {
- vis[i*prime[j]]=true;
- if(i%prime[j]==)
- {
- miu[i*prime[j]]=;
- phi[i*prime[j]]=phi[i]*prime[j];
- break;
- }
- miu[i*prime[j]]=-miu[i];
- phi[i*prime[j]]=phi[i]*(prime[j]-);
- }
- }
- for(int i=;i<N;i++)
- {
- Sum_phi.Insert(i,Sum_phi.val(i-)+phi[i]);
- Sum_miu.Insert(i,Sum_miu.val(i-)+miu[i]);
- }
- return ;
- }
- long long PHI_search(unsigned int pos)
- {
- if(Sum_phi.find(pos))
- return Sum_phi.val(pos);
- long long tmp=;
- for(unsigned int i=,j;i<=pos;i=j+)
- {
- j=pos/(pos/i);
- tmp+=PHI_search(pos/i)*(long long)(j-i+);
- }
- Sum_phi.Insert(pos,1ll*pos*(pos+)/-tmp);
- return 1ll*pos*(pos+)/-tmp;
- }
- long long MIU_search(unsigned int pos)
- {
- if(Sum_miu.find(pos))
- return Sum_miu.val(pos);
- long long tmp=;
- for(unsigned int i=,j;i<=pos;i=j+)
- {
- j=pos/(pos/i);
- tmp+=(j-i+)*MIU_search(pos/i);
- }
- Sum_miu.Insert(pos,-tmp);
- return -tmp;
- }
- int main()
- {
- gtp();
- int T;
- scanf("%d",&T);
- while(T--)
- {
- int x;
- scanf("%d",&x);
- printf("%lld %lld\n",PHI_search(x),MIU_search(x));
- }
- return ;
- }
BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)的更多相关文章
- 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,表示测试数据的组 ...
- [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)
[BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...
- [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 ...
- bzoj3994: [SDOI2015]约数个数和(反演+结论?!)
这题做的历程堪称惊心动魄 刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子 期间有突破,有停滞,有否定 然后苟蒻的我背着cbx偷偷打开了题解 看到了 我...... 去你的有个性质啊(当然还是自 ...
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N∑j=1Md(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...
随机推荐
- GoldenGate 应用系统升级
(仅复制DML时)源端和目标端数据库增减复制表 增加复制表 在GoldenGate的进程参数中,如果通过*来匹配所有表,因此只要符合*所匹配的条件,那么只要在源端建立了表之后GoldenGate就能自 ...
- 消除textarea的空格de长度值
在项目中因为用到文本域textarea输入textarea的长度总是显示 25 那是还怀疑textarea自带有value长度? placeholder属性的长度? 那时候想到类似:ul无序列表li元 ...
- 【转】C#中RSA加密解密和签名与验证的实现
[转]C#中RSA加密解密和签名与验证的实现 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔 ...
- 【转】CentOS下firefox安装flash说明
http://www.cnblogs.com/lamper/archive/2013/01/16/2862254.htm CentOS下自带了firefox,但没有flash插件的,按它自己的提示安装 ...
- dynamic_cast与能力查询
在C++里面,dynamic_cast 通常用于横向转换,而不是向上或者向下的转换. 这个常常用于检查某个实例,是否实现了某个接口类,那么就把这个实例,用dynamic_cast来转换成这个接口类的实 ...
- [React Native] Use the SafeAreaView Component in React Native for iPhone X Compatibility
In this lesson, you will learn how to use the SafeAreaView component to avoid the sensor cluster (th ...
- LINUX 系统初始化脚本
#!/bin/bash ######the system first start configuretion #####for install ####copy right by donglei## ...
- Id选择器和Class选择器
http://www.runoob.com/css/css-id-class.html http://www.w3school.com.cn/css/css_syntax_id_selector.as ...
- Entity Framework之Code First开发方式
一.Code First Code First方式只需要代码,不需要Edmx模型.EF通过实体类型结构推断生成SQL并创建数据库中的表.开发人员只需要编写实体类就可以进行EF数据库的开发. Code ...
- spring xml配置文件根元素(文件头文件)说明
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...