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( ...
随机推荐
- selenium元素单击不稳定解决方法
selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映. 以下总结两种解决方法:都是通过js注入的方式去点击. 1.F12查一看,要点击的按钮,或连接,有没有on ...
- hadoop2.4.1 伪分布
最终的 /etc/profile :#在文件最后添加 # /etc/profile # System wide environment and startup program ...
- Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关
Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关 那个上传图片太麻烦了,发布到百度文库了 http://wenku.baidu.com/view/b38ae8 ...
- Applegate 方法使用
1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotif ...
- tcp_协议基础
具体7层 数据格式 功能与连接方式 典型设备 应用层 Application 数据Data 网络服务与使用者应用程序间的一个接口 终端设备(PC.手机.平板等) 表示层 Presentation ...
- linux 命令杂集
[1]查找日志中某个字符串XXXX tail -f 日志文件名 | grep "XXXX" [2]linux抓包命令 tcpdump -i XXX -A ip xxx.xx ...
- awk和sed
在正则表达式那章有两个比较好用的命令sed 和awk awk 是按指定分隔符分隔,默认空白键,第一个为$1,第二个为$2... 命令: FS分隔符
- mybatis源码解析6---MappedStatement解析
MappedStatement类位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变 MappedStatement对象对 ...
- flask渲染模板时报错TypeError: 'UnboundField' object is not callable
渲染模板时,访问页面提示TypeError: 'UnboundField' object is not callable 检查代码,发现实例化表单类是,没有加括号:form = NewNoteForm ...
- bzoj2656 [Zjoi2012]数列(sequence)
题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...