bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description
Input
Output
Sample Input
10 10
100 100
Sample Output
2791
HINT
T = 10000
N, M <= 10000000
题目大意 (题目太简洁不需要大意)。
根据常用套路,我们有

显然TLE,为了更好的分段计算,所以考虑把后面两个向下取整取整的分数挪出来。于是得到了下面这个优美的式子:

现在就来考虑后面那个求和。
考虑莫比乌斯函数的性质和p为质数。
1)当T存在一个质因子的指数超过2,显然对答案贡献为0
2)当T存在超过1个质因子的指数为2,显然对答案贡献为0
3)当T只存在1个质因子的指数为2,那么当且仅当p的值为这个质因子时,对答案才有贡献,这个贡献为-1的不同质因子次幂。
4)当T的质因子的指数均为1,那么对答案的贡献为T的质因子个数乘-1的不同质因子个数减一 次幂。
显然可以用线性筛预处理出这个的值的前缀和,这样就可以做到单次查询根号级别。
至于如何用线性筛预处理,我记录了一个enable表示是否存在1个质因子的指数大于等于2和defp表示不同的质因子的个数。详细的过程请看代码。
Code
/**
* bzoj
* Problem#2820
* Accepted
* Time:4708ms
* Memory:141912k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean; #define LL long long const int limit = 1e7; int num = ;
int prime[];
boolean vis[limit + ];
boolean enable[limit + ];
LL g[limit + ];
int defp[limit + ];
inline void Euler() {
memset(vis, false, sizeof(vis));
memset(enable, true, sizeof(enable));
g[] = g[] = ;
for(int i = ; i <= limit; i++) {
if(!vis[i]) prime[num++] = i, g[i] = , defp[i] = ;
for(int j = ; j < num && i * 1LL * prime[j] <= limit; j++) {
int c = i * prime[j];
vis[c] = true;
if(i % prime[j]) {
defp[c] = defp[i] + ;
enable[c] = enable[i];
g[c] = (enable[i]) ? ((defp[c]) * ((defp[c] & ) ? () : (-))) : (-g[i]);
} else {
defp[c] = defp[i];
enable[c] = false;
g[c] = (enable[i]) ? ((defp[c] & ) ? (-) : ()) : ();
break;
}
}
}
for(int i = ; i <= limit; i++)
g[i] += g[i - ];
// cout << num << endl;
// for(int i = 1; i <= 20; i++)
// cout << i << " " << g[i] << " " << defp[i] << endl;
} int n, m;
inline void init() {
scanf("%d%d", &n, &m);
} inline void solve() {
if(n > m) swap(n, m);
LL res = ;
for(int i = , j; i <= n; i = j + ) {
j = min(n / (n / i), m / (m / i));
res += (n / j) * 1LL * (m / j) * (g[j] - g[i - ]);
}
printf(Auto"\n", res);
} int T;
int main() {
Euler();
scanf("%d", &T);
while(T--) {
init();
solve();
}
return ;
}
bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛的更多相关文章
- [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- bzoj 2820 YY的GCD 莫比乌斯反演
题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...
- BZOJ 2820 YY的GCD ——莫比乌斯反演
我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...
- BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...
- 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 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)
首先我们来看一道题 BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...
随机推荐
- MS16-032 漏洞复现
exploit-db的详情: https://www.exploit-db.com/exploits/39574/ Windows: Secondary Logon Standard Handles ...
- es6Math对象新增的方法
Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分. 对于没有部署这个方法的环境,可以用下面的代码模拟. Math.trunc = Math.trunc || f ...
- jQuery-插入内容-新增内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 解决session只能被一个浏览器访问的问题
做购物车的时候,我们都知道购买的东西会保存到session中,但是光这样简单的保存起来就会带来一个问题,只能呢被同一个浏览器访问到,如果用户使用不同的浏览器进行访问网页的话肯定是会出问题的.下面就来针 ...
- 依赖反转Ioc和unity,autofac,castle框架教程及比较
1.依赖倒置的相关概念 http://www.cnblogs.com/fuchongjundream/p/3873073.html IoC模式(依赖.依赖倒置.依赖注入.控制反转) 2.依赖倒置的方式 ...
- 使用Navicat导入SQL文件
2018-11-04 19:35:12 开始写 刷新后就可以看见导入的数据库了(按F5刷新) 谢谢.Thank you.Salamat Do(撒拉玛特朵).あリがCám o*n(嘉蒙)とゥ(阿里嘎都) ...
- 更换tomcat运行日志目录
1.在tomcat安装文件夹的bin目录下,修改catalina.sh,改变catalina.out的输出目录 CATALINA_OUT="$CATALINA_BASE"/logs ...
- 基于TCP/IP协议的socket通讯client
package com.ra.car.utils; import java.io.BufferedReader; import java.io.IOException; import java.io. ...
- js三目学习
<script> var n=1; n>1?document.write('大于1哦'):document.write('小于或等于1哦') //n=n>1?document. ...
- NodeJS,JavaScript正在吞噬这个世界
NodeJS,JavaScript正在吞噬这个世界 NodeJS,一个基于Google Chrome V8 JS引擎的服务器端JavaScript运行时,曾经被认识只是一个赶时髦的技术,有谁会想到,它 ...