【莫比乌斯反演】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)。T<=1e4; a,b<=1e7。
Solution
一开始没仔细看数据范围然后打了一个每个询问O(n)的,当然T了
(盗一张图)
一开始我按照第二行的做的,里层外层循环都和ab有关,每一层都要sqrt(n)
然后发现f(d)和ab无关,于是把f放到里面,把和ab有关的拎出来,就变成了第三行的式子
这样里面一层循环与ab无关,可以预处理好
我们要求的就是后面sigma的前缀和
不难想到nlogn的预处理,但这题比较卡还是T
于是要这么做
设g(T)=Σ[d|T]f(d)μ(T/d)
大力分析
将T质因数分解,对于每一个p^a,T/d的p系数要么为0要么为1,否则μ(T/d)一定为0不考虑
如果存在ai!=aj,关于T的因数p按a可以分为两个集合,a最大A集合和a非最大的B集合
f取值由A集合的选取决定
μ由选取的总个数决定
无论A怎么选,在B中选取的奇偶方案数相同,于是总贡献一定为0
也就是如果存在ai!=aj, g(T)=0
那么a都相等的情况
选奇数选偶数方案相同贡献也为0
但如果p全部都选那么f的贡献为a-1(其余选法f贡献都为a)
所以要多减一个1,考虑μ的影响,对于有k个p的T,g(T)=(-1)^(k+1)
具体的计算方法在线性筛的时候记录一个当前最小素数的次数和去掉最小素数后上一个数
如果清楚线性筛的原理那么还是很好想的
预处理复杂度同线性筛,询问复杂度为sqrt(n)
Code
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=1e7+; bool flag[maxn]; int prime[maxn],cnt;
int t[maxn],last[maxn],g[maxn];
int n,m; void getmu(){
for(int i=;i<=1e7;i++){
if(!flag[i]){
prime[++cnt]=i;
last[i]=t[i]=;
g[i]=;
}
for(int j=;i*prime[j]<=1e7&&j<=cnt;j++){
int x=i*prime[j];
flag[x]=;
if(i%prime[j]==){
last[x]=last[i];
t[x]=t[i]+;
if(last[x]==)
g[x]=;
else
g[x]=(t[last[x]]==t[x]?-g[last[x]]:);
break;
}
last[x]=i;
t[x]=;
g[x]=(t[i]==?-g[i]:);
}
}
for(int i=;i<=1e7;i++)
g[i]+=g[i-];
} ll f(int x,int y){
ll ret=;
for(int i=,pos=;i<=x;i=pos+){
pos=min(x/(x/i),y/(y/i));
ret+=1ll*(g[pos]-g[i-])*(x/i)*(y/i);
}
return ret;
} int main(){
getmu(); int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
printf("%lld\n",f(n,m));
}
return ;
}
【莫比乌斯反演】BZOJ3309 DZY Loves Math的更多相关文章
- BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...
- bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math
bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...
- BZOJ3309 : DZY Loves Math
莫比乌斯反演得 $ans=\sum g[i]\frac{a}{i}\frac{b}{i}$ 其中$g[i]=\sum_{j|i}f[j]\mu(\frac{i}{j})$ 由f和miu的性质可得 设$ ...
- [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 【莫比乌斯反演】
题目 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(si ...
- DZY Loves Math系列
link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...
- 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
[BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...
- 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)
[BZOJ3309]DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10 ...
- 【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) ...
随机推荐
- Mac环境svn的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- Java Web开发中路径问题小结
Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...
- Struts,Spring,Hibernate三大框架的
1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持 ...
- XML 和 java对象相互转换
XML 和 java对象相互转换 博客分类: XML 和 JSON 下面使用的是JDK自带的类,没有引用任何第三方jar包. Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 ...
- Python笔记之 - 一张截图诠释"文件读写" !
Python笔记之 - 一张截图诠释"文件读写" ! 源代码如下: # 文件读写 str_test1 = "先创建txt文件再写入内容: 我是大帅哥" # wi ...
- FFmpeg备忘录
av_dup_packet函数 av_dup_packet会为destruct指针为av_destruct_packet_nofree的AVPacket新建一个缓冲区,将原有的缓冲区数据拷贝至新缓冲区 ...
- Bootstrap免费模板站推荐
第一个:http://startbootstrap.com/ 第二个:http://www.bootstrapzero.com/ 第三个:https://bootswatch.com/ 第四个:htt ...
- RxJava 2.x 使用最佳实践
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76443347 本文出自[赵彦军的博客] 以前写过 Rxjava 系列教程, 如下所 ...
- Hystrix 熔断机制原理
相关配置 circuitBreaker.enabled 是否开启熔断 circuitBreaker.requestVolumeThreshold 熔断最低触发请求数阈值 circuitBreaker. ...
- lvs与nginx区别
lvs和nginx都可以用作多机负载方案,他们各有优缺点,在生产环境中需要好好分析实际情况并加以利用. 一.lvs的优势: 1.抗负载能力强,因为lvs工作方式的逻辑是非常简单的,而且工作再网络层第4 ...