【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)
【BZOJ3309】DZY Loves Math
Description
对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。
Input
第一行一个数T,表示询问数。
接下来T行,每行两个数a,b,表示一个询问。
Output
对于每一个询问,输出一行一个非负整数作为回答。
Sample Input
7558588 9653114
6514903 4451211
7425644 1189442
6335198 4957
Sample Output
14225956593420
4332838845846
15400094813
HINT
【数据规模】
T<=10000
1<=a,b<=10^7
题解:其实如果熟悉了这类题的套路,本题也不是特别难的~
然后我们设$g(D)=\sum\limits_{d|D}f(d)\mu({D\over d})$,那么只要g能线性筛出来问题就解决了。
但是如何筛呢?我们还是先找个规律吧~
先从简单的开始,如果$D=p_1^{e_1}$,那么我们将和式展开,它等于:$f(p_1^{e_1})\times \mu(1)+f(p_1^{e_1-1})\times \mu(p_1)$,余下的项呢?剩下的都是mu=0啦!所以$g(D)=e_1-(e_1-1)=1$。
我们继续,如果$D=p_1^{e_1}*p_2^{e_2}$,那么$g(D)=max(e_1,e_2)-max(e_1-1,e_2)-max(e_1,e_2-1)+max(e_1-1,e_2-1)$,先假设${e_1=e_2}$,那么原式=$e_1-e_1-e_1+(e_1-1)=-1$;那如果$e_1<e_2$呢?原式=$e_2-e_2-(e_2-1)+(e_2-1)=0$。
接下来,如果$D=p_1^{e_1}*p_2^{e_2}$,还是先假设$e_1=e_2=e_3$,那么$g(D)=max(e_1,e_2,e_3)-max(e_1-1,e_2,e_3)-max(e_1,e_2-1,e_3)-max(e_1,e_2,e_3-1)+max(e_1-1,e_2-1,e_3)-max(e_1-1,e_2,e_3-1)-max(e_1,e_2-1,e_3-1)+max(e_1-1,e_2-1,e_3-1)=e_1-e_1-e_1-e_1+e_1+e_1+e_1-(e_1-1)=1$,唉?看出什么模式了吗?
如果$g(D)=\prod\limits_{i=1}^kp_i^{e_i}$,其中$e_1=e_2=...=e_k$,那么$g(D)=(-1)^{k+1}$,这个猜想是正确的吗?显然,因为在上面的式子中,只要max里有一个ei,那么整个max的值就是$e_1$,也就意味着除了最后一项的绝对值是$e_1-1$,其余所有项的绝对值都是$e_1$。并且,如果我们将原式看成:在k个物品中取出若干个,并用$e_i$表示取,用$e_i-1$表示不取,那么显然取出奇数个物品和取出偶数个物品的方案数是相同的,也就意味着在这些max的符号中,正号和负号的个数是相同的,所以我们只需要考虑最后一项$e_i-1$的符号就行了。显然,它的符号只取决于k的奇偶性。
好了,我们已经处理完$e_1=e_2=...=e_k$的情况了,现在处理它们不完全相等的情况。上面已经有例子证明当k=2时,g(D)=0了,那么是不是所有这样的g(D)都等于0呢?答案:是的。我们不妨设$e_1<e_2=e_3=...=e_k$,那么因为$e_1$比所有$e_i(i>2)$都小,所以$e_1$一定也不超过任何的$e_i-1(i>2)$。也就是说,如果在上面的max式中将$e_1$去掉,max式的值是不发生改变的。那么上面的max式的值都变成了什么呢?除了$max(e_1-1,e_2-1,e_3-1...e_k-1)$和$max(e_1-1,e_2,e_3...e_k)$的绝对值等于$e_2-1$以外,其余的max式的绝对值都是$e_2$。并且,因为形如$max(e_1,...)$和$max(e_1-1,...)$的式子的个数是相等的,它们的正负号也一定是一一对应的。既然绝对值都相等,符号都相对了,答案自然是等于0的。
然后就没啦!我们可以开始线性筛g数组啦!具体怎么筛呢?这里只提供大致方法:维护mn[i]表示i的最小质因子的次数,mx[i]表示i的出现次数最多的质因子的次数,xp[i]表示出现次数最多的质因子有多少个(如果有出现次数不相同的质因子,那么xp=0)。此时的线性筛已经不再是线性筛,而是一个DP...
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- using namespace std;
- const int maxn=10000010;
- const int N=10000000;
- typedef long long ll;
- int pri[maxn/10],mx[maxn],mn[maxn],xp[maxn],f[maxn];
- bool np[maxn];
- int n,a,b,num;
- ll ans;
- inline int rd()
- {
- int ret=0,f=1; char gc=getchar();
- while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
- while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
- return ret*f;
- }
- int main()
- {
- int i,j,k;
- f[1]=0;
- for(i=2;i<=N;i++)
- {
- if(!np[i]) pri[++num]=i,mn[i]=1,f[i]=1;
- else
- {
- if(xp[i]==-1||(xp[i]&&mn[i]!=mx[i])) f[i]=0;
- else f[i]=(xp[i]&1)?-1:1;
- }
- f[i]+=f[i-1];
- for(j=1;j<=num&&i*pri[j]<=N;j++)
- {
- k=i*pri[j],np[k]=1;
- if(xp[i]==-1) xp[k]=-1;
- else if(i%pri[j]==0)
- {
- mn[k]=mn[i]+1,xp[k]=xp[i],mx[k]=mx[i];
- break;
- }
- else
- {
- if(!xp[i]) xp[k]=1,mx[k]=mn[i],mn[k]=1;
- else if(mn[i]!=mx[i]) xp[k]=-1;
- else xp[k]=xp[i]+1,mn[k]=1,mx[k]=mn[i];
- }
- }
- }
- int T=rd(),last,n,m;
- while(T--)
- {
- ans=0,n=rd(),m=rd();
- if(n>m) swap(n,m);
- for(i=1;i<=n;i=last+1)
- {
- last=min(n/(n/i),m/(m/i));
- ans+=(ll)(f[last]-f[i-1])*(n/i)*(m/i);
- }
- printf("%lld\n",ans);
- }
- return 0;
- }
【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)的更多相关文章
- [BZOJ3309]DZY Loves Math(莫比乌斯反演+线性筛)
$\sum\limits_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d|T}f(d)\mu(\fr ...
- 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛
Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
- 【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化
3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007) ...
- bzoj 3309 DZY Loves Math 莫比乌斯反演
DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1303 Solved: 819[Submit][Status][Dis ...
- BZOJ3309 DZY Loves Maths 莫比乌斯反演、线性筛
传送门 推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^Mf(gcd(i,j)) & = ...
- 【BZOJ3309】DZY Loves Math - 莫比乌斯反演
题意: 对于正整数n,定义$f(n)$为$n$所含质因子的最大幂指数.例如$f(1960)=f(2^3 * 5^1 * 7^2)=3$,$f(10007)=1$,$f(1)=0$. 给定正整数$a,b ...
- BZOJ 3309 DZY Loves Math ——莫比乌斯反演
枚举$d=gcd(i,j)$ 然后大力反演 ——来自Popoqqq的博客. 然后大力讨论后面的函数的意义即可. http://blog.csdn.net/popoqqq/article/details ...
- bzoj 3309 DZY Loves Math —— 莫比乌斯反演+数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 凭着上课所讲和与 Narh 讨论推出式子来: 竟然是第一次写数论分块!所以迷惑了半天: ...
随机推荐
- Linux修改SSH端口
为什么要修改默认22端口 最近公司ssh全部换掉了默认的22端口,主要是为了防止被黑客大规模的扫描. 修改步骤 如果有需要请关闭防火墙(防止改错端口无法登陆) 修改sshd_config vim /e ...
- 软件测试技术---Web应用软件测试
从测试的角度看,Web应用软件的以下特点会导致Web应用软件的测试有别于其他软件的测试 1.基于无连接协议 2.内容驱动 3.开发周期短 4.演化频繁 5.安全性要求较高 6.美观性要求较高 Web应 ...
- Powershell 远程管理
一直使用 mstsc,为了防止墨菲定律,准备一些备用方案 环境,win10 to win12 winrm是windows 一种方便远程管理的服务: 首先要开启winrm service,便于在日常工作 ...
- Vue笔记五
十二.过滤器(filter) 示例代码: <template> <div id="app"> {{ msg | capitalize }} </div ...
- python——父类与子类的一些说明
Python中类的初始化方法是__init__(),因此父类.子类的初始化方法都是这个,如果子类不实现__init__()这个函数,初始化时调用父类的初始化函数, 如果子类实现了这个函数,则要在这个函 ...
- Php如何使用curl
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如 ...
- poj1062昂贵的聘礼
这个题目我最開始看题目看了半天,看不懂.. 可是通过看例子及答案最终看懂了. .. 首先先解决等级的关系. .假设等级越界.则不能交换..所以原本等级的界限是 [rank[1]-m,rank[1]+m ...
- scrollTop clientTop offsetTop scrollHeight clientHeight clientWidth的差别及使用方法
这几个属性做滚动时会经经常使用到.现总例如以下: 首先定义一个div.样式例如以下: <style> *{ margin:0px; padding:0px;} body{ margin:0 ...
- 正则化--L2正则化
请查看以下泛化曲线,该曲线显示的是训练集和验证集相对于训练迭代次数的损失. 图 1 显示的是某个模型的训练损失逐渐减少,但验证损失最终增加.换言之,该泛化曲线显示该模型与训练集中的数据过拟合.根据奥卡 ...
- java之JDK动态代理
© 版权声明:本文为博主原创文章,转载请注明出处 JDK动态代理: JDK动态代理就是在程序运行期间,根据java的反射机制自动的帮我们生成相应的代理类 优势: - 1. 业务类只需要关注业务逻辑本身 ...