【莫比乌斯反演】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) ...
随机推荐
- ES6中Promise详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...
- word search(二维数组中查找单词(匹配字符串))
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- Linux的vi详解
Vi简介1. Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序.2. Vi不是排版程序,只是一个纯粹的文本编辑程序.3. Vi是全屏幕文本编辑器,它没有菜单,只有命令.4. Vi不是基 ...
- 通过slave_exec_mode=IDEMPOTENT跳过主从复制中的错误
通过slave_exec_mode=IDEMPOTENT跳过主从复制中的错误 set global slave_exec_mode=IDEMPOTENT slave_exec_mode 有两种模式 S ...
- Java编程语言下Selenium 鼠标悬停以及右击操作
// 基于Actions类创建一个对象 Actions action = new Actions(driver); // 鼠标悬停在药渡公司全称字段上 action.moveToElement(Yao ...
- Failed to create the Java Virtual Machine(zt)
http://lixueli26.iteye.com/blog/711152 在以下版本也发生类似情况,采用同样方法得以解决. 版本:eclipse-jee-indigo-win32 自己电脑上装的j ...
- Android layout_margin 无效的解决办法
http://www.aichengxu.com/view/31025 1.如果LinearLayout中使用Android:layout_marginRight不起作用,通过测试原来在android ...
- C++ 延时等待(sleep/timer/wait)
原文链接:http://blog.csdn.net/tangweide/article/details/7063747 (-)使用_sleep()函数 #include <iostream> ...
- J2EE--常见面试题总结 -- (二)
1 Spring拦截器的基本功能是什么? 拦截器是基于Java的反射机制的,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单 ...
- form表单序列化为Jquery对象
<form id="DailyFinancial" > @*class="form-inline"*@ <div class="fo ...