bzoj 2820 YY的GCD 莫比乌斯反演
题目大意:
给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对
这里就抄一下别人的推断过程了

后面这个g(x) 算的方法就是在线性筛的时候只考虑当前的数最小因子,如果进来的最小因子不存在,相当于在之前那个数的基础上的每个mu值都多加了一个质数,那么
这些mu值就要取反,如果已经包含了这个最小因子,我这里另外进行了跟之前类似的讨论方法,在代码中写着
因为这题目数据比较大,这里求解的时候不应该线性求,因为总是有一段区间的n/i*(m/i)值相同,将g[]数组求一个前缀和,记录一段区间得到的值,可以缩小到
sqrt(n)的复杂度
/*bzoj2820 YY的GCD*/
#include <bits/stdc++.h> using namespace std;
#define ll long long
#define N 10000000
int mu[N+] , prime[N+] , tot , f[N+] , sum[N+];
bool check[N+]; void get_mu()
{
mu[] = ;
for(int i= ; i<=N ; i++){
if(!check[i]){
prime[tot++] = i;
mu[i] = -;
f[i] = ;
}
for(int j= ; j<tot ; j++){
if((ll)prime[j]*i>N) break;
check[prime[j]*i] = true;
if(i%prime[j]){
mu[i*prime[j]] = -mu[i];
f[i*prime[j]] = -f[i]+mu[i];
}else{
/*
本身i中已经含有素数prime[j]
在if中表示含有至少3个因子prime[j],那么最后不管怎么样,当前数值除以一个因子都至少
含有两个prime[j],那么必然为0
else 只有2个prime[j]的情况,那么就是除了除以prime[j]其他情况得到的都是至少有两个因子
的,那么mu[]必然为0,而因为从当前增加了一个因子,那么就是讲那个取到的取反就可以了
*/
if((i/prime[j])%prime[j]==) f[i*prime[j]] = mu[i];
else f[i*prime[j]] = -mu[i/prime[j]];
break;
}
}
}
for(int i= ; i<=N ; i++) sum[i] = sum[i-]+f[i];
}
int n , m; ll solve()
{
int mn = min(n , m) , last ;
ll ret=;
for(int i= ; i<=mn ; i=last+){
last = min(n/(n/i) , m/(m/i));
ret += (ll)(sum[last]-sum[i-])*(n/i)*(m/i);
}
return ret;
} int main()
{
freopen("in.txt" , "r" , stdin);
get_mu();
int T;
scanf("%d" , &T);
while(T--){
scanf("%d%d" , &n , &m);
printf("%lld\n" , 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 - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...
- BZOJ 2820 YY的GCD ——莫比乌斯反演
我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...
- 【莫比乌斯反演】关于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( ...
- 【刷题】BZOJ 2820 YY的GCD
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种傻×必然 ...
- SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...
随机推荐
- linux 命令集
cat chattr chgrp c hmod chown cksum cmp diff diffstat file find git gitview indent cut ln less ...
- golang 资源
1.Learning Go <学习Go语言> http://www.miek.nl/projects/learninggo/中文版http://mikespook.com/learning ...
- unsigned char 无符号整形 减法运算
对于一个字节来说: unsigned char : 0 ~ 255 0000 0000 ~ 1111 1111 char :-128 ~ 127 ...
- ManyToMany关联方式----
http://blog.csdn.net/sinat_18882775/article/details/51171427 好的博客 系列文章总结
- robotframework笔记26
测试数据文档工具(Testdoc) Testdoc是机器人框架内置的工具生成高水平 根据测试用例文档. 创建的文档是在HTML中 格式和它包括名称.文档和其他元数据 测试套件和测试用例,以及和他们的顶 ...
- [redis] Redis 常用命令
redis命令文档:http://doc.redisfans.com/index.html 1. redis查看当前所有的key KEYS * 模糊匹配keykeys 模糊字符串* 2. 查看当前 ...
- sql server多表数据批量更新
update wset w.TagCount=x.TagCountfrom (select ItemID,COUNT(*) as TagCount from r where IsValid=1 gro ...
- easyui的基本用法
之前有用过extjs,最近发现easyui和fineui和extjs比较类似,并且稍微简单一点,所以考虑使用. 以下是项目中的具体简单应用 function callback2d(data) {//d ...
- HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
Destroying the bus stations ...
- Java 之 I/O 系列 01 ——基础
Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...