【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 讨论推出式子来: 竟然是第一次写数论分块!所以迷惑了半天: ...
随机推荐
- JAVA之接口与抽象类区别
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- elasticsearch 插入数据
1.单条插入(推荐设定主键id防止重复) public static String addIndex(String index,String type,HashMap<String, Objec ...
- 倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
同步周期有问题 请确认MOTION的伺服周期是一致的,最好跟MAIN主程序也一样,所有周期都是2ms即可 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.yo ...
- IOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 转载
http://blog.csdn.net/he_jiabin/article/details/48677911 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为 ...
- mysql常用命令和函数
一.DROP IF EXISTS DROP FUNCTION IF EXISTS fun;DROP TABLE IF EXISTS table; 二.数据表1.建立表CREATE TABLE test ...
- react native使用 mobx , can't find variable:Symbol
原因是因为 mobx的版本用的最新版本..用到了 Symbol部分es6的api特性. 解决问题办法 1. 把mobx降版本到 4.3.1 . mobx-react降版本到 5.1.0 即可. 或者 ...
- react 打包后,项目部署完毕,刷新页面报错(404)
原因解析: 之所以你在浏览器内可以由首页跳转到其他路由地址,是因为这是由前端自行渲染的,你在React Router定义了对应的路由,脚本并没有刷新网页访问后台,是JS动态更改了location. 当 ...
- Velocity.js动画库使用
1.简介 Velocity 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. 2 ...
- 怎样把报表放到网页中显示(Web页面与报表简单集成样例)
1.问题描写叙述 如今用户开发的系统基本上趋向于BS架构的浏览器/server模式.这些系统可能由不同的语言开发.如HTML.ASP.JSP.PHP等.因此须要将制作好的报表嵌入到这些页面中. Fin ...
- C#写csv文件
1.在项目中经常需要把报表下载为csv格式的文件,如何在C#中写csv文件,以下为一个简化的例子,不使用任何控件,旨在说明用法. 前端view 下载结果 2.创建一个MVC项目(Intranet Ap ...