P2257 YY的GCD
P2257 YY的GCD
题目描述
神犇YY虐完数论后给傻×kAc出了一题
给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对
kAc这种傻×必然不会了,于是向你来请教……
多组输入
输入输出格式
输入格式:
第一行一个整数T 表述数据组数
接下来T行,每行两个正整数,表示N, M
输出格式:
T行,每行一个整数表示第i组数据的结果
输入输出样例
说明
T = 10000
N, M <= 10000000
思路:倍数莫比乌斯反演。

(太长时间没写字了。。
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7 + ;
int t;
//线性筛法求莫比乌斯函数
bool vis[N + ];
int pri[N + ];
int mu[N + ];
ll sum[N];
int f[N];
void mus() {
memset(vis, , sizeof(vis));
memset(f,, sizeof(f));//f[n]=sum(mu[n/p])
mu[] = ;
int tot = ;
for (int i = ; i < N; i++) {
if (!vis[i]) {
pri[tot++] = i;
mu[i] = -;
}
for (int j = ; j < tot && i * pri[j] < N; j++) {
vis[i * pri[j]] = ;
if (i % pri[j] == ) {
mu[i * pri[j]] = ;
break;
}
else mu[i * pri[j]] = -mu[i];
}
}
for(int i=;i<N;i++)
for(int j=;j<tot&&pri[j]*i<N;j++) f[i*pri[j]]+=mu[i];//需要重复更新,不能放在线性筛内部
sum[]=;
for(int i=;i<N;i++) sum[i]=sum[i-]+f[i];
}
int n,m,k;
ll cal(int x,int y){
int ma=min(x,y);
ll res=;
for(int i=,j;i<=ma;i=j+){
j=min(x/(x/i),y/(y/i));
if(j>=ma) j=ma;
res+=1ll*(sum[j]-sum[i-])*(x/i)*(y/i);
}
return res;
} int main() {
mus();
scanf("%d",&t);
for(int i=;i<=t;i++){
scanf("%d%d",&n,&m);
ll ans;
ans=cal(n,m);
printf("%lld\n",ans);
}
return ;
}
P2257 YY的GCD的更多相关文章
- 洛谷 P2257 YY的GCD
洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...
- [Luogu P2257] YY的GCD (莫比乌斯函数)
题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...
- 题解 P2257 YY的GCD
P2257 YY的GCD 解题思路 果然数论的题是真心不好搞. 第一个莫比乌斯反演的题,好好推一下式子吧..(借鉴了blog) 我们要求的答案就是\(Ans=\sum\limits_{i=1}^{n} ...
- P2257 YY的GCD (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...
- 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块
https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...
- 洛谷 P2257 YY的GCD 题解
原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- Luogu P2257 YY的GCD
莫比乌斯反演第一题.莫比乌斯反演入门 数论题不多BB,直接推导吧. 首先,发现题目所求\(ans=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=prime]\) 考虑反演,我 ...
随机推荐
- Python学习---内置函数的学习
内置函数 [Py3.5官方文档]https://docs.python.org/3.5/library/functions.html#abs Built-in Functions abs() dict ...
- oracle获得ddl语句
dbms_metadata.get_ddl()用于获取对象的DDL,其具体用法如下.注意:在sqlplus里,为了更好的展示DDL,需要设置如下参数:set line 200set pagesize ...
- SVN安装操作流程
SVN 安装操作流程 1.服务端安装流程 1.1 双击打开svn-server安装包 1.2 点击Next 1.3 勾选上“I accert the terms in the License Agre ...
- 使用Hibernate注解Annotations进行对象映射的异常处理
通过Hibernate注解Annotations进行对象映射,想在Oracle数据库中自动创建表,代码如下: 实体类: import javax.persistence.Basic;import ja ...
- 大素数测试的Miller-Rabin算法
Miller-Rabin算法本质上是一种概率算法,存在误判的可能性,但是出错的概率非常小.出错的概率到底是多少,存在严格的理论推导. 一.费马小定理 假如p是质数,且gcd(a,p)=1,那么 a(p ...
- IntelliJ IDEA设置编码格式
IntelliJ IDEA设置编码格式为UTF-8
- 针对Restful风格参数传递的请求获取真实url
昨天遇到这样一个问题,先简单介绍下. 业务场景 我们想要统计热点请求URL,进而进行分析优化 方案 通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进 ...
- Cow Relays 【优先队列优化的BFS】USACO 2001 Open
Cow Relays Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- faster-rcnn anchor_target_layer、rpn_proposal_layer、proposal_target_layer
faster rcnn中这三层是单独生成的层,也是复现最复杂的层 anchor_target_layer作用:从众多的anchor中选取出正负样本供rpn网络学习(实际上就是把anchor和gt进行配 ...
- centos中java安装跟配置
安装配置java环境 [root@JxateiLinux src]# Wget http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c ...