【数论】YY的GCD(P2257)
正题
P2257
题目大意
给你T组询问,每组询问给出n,m,让你求 1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m 且 gcd(x,y)=primegcd(x,y)=primegcd(x,y)=prime 的方案数
解题思路
根据题意,有
∑i=1n∑j=1m[gcd(i,j)=prime]\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prime] i=1∑nj=1∑m[gcd(i,j)=prime]
考虑把prime拿出来枚举
∑p∈primen∑i=1n/p∑j=1m/p[gcd(i,j)=1]∑p∈primen∑i=1n/p∑j=1m/p∑d∣i,d∣jμ(d)∑p∈primemin(n,m)∑d=1min(n,m)/pμ(d)×⌊ndp⌋×⌊mdp⌋\sum_{p\in prime}^n\sum_{i=1}^{n/p}\sum_{j=1}^{m/p}[gcd(i,j)=1]\\ \sum_{p\in prime}^n\sum_{i=1}^{n/p}\sum_{j=1}^{m/p}\sum_{d|i,d|j}\mu(d)\\ \sum_{p\in prime}^{min(n,m)}\sum_{d=1}^{min(n,m)/p}\mu(d)\times\left\lfloor\frac{n}{dp}\right\rfloor\times\left\lfloor\frac{m}{dp}\right\rfloor\\ p∈prime∑ni=1∑n/pj=1∑m/p[gcd(i,j)=1]p∈prime∑ni=1∑n/pj=1∑m/pd∣i,d∣j∑μ(d)p∈prime∑min(n,m)d=1∑min(n,m)/pμ(d)×⌊dpn⌋×⌊dpm⌋
然后可以考虑改变枚举变量
可以发现后面的两个整除都与dp有关,那么考虑枚举dp,那么有
∑k=1min(n,m)∑p∈prime,p∣kμ(kp)×⌊nk⌋×⌊mk⌋∑k=1min(n,m)⌊nk⌋⌊mk⌋∑p∈prime,p∣kμ(kp)\sum_{k=1}^{min(n,m)}\sum_{p\in prime,p|k}\mu(\frac{k}{p})\times\left\lfloor\frac{n}{k}\right\rfloor\times\left\lfloor\frac{m}{k}\right\rfloor\\ \sum_{k=1}^{min(n,m)}\left\lfloor\frac{n}{k}\right\rfloor\left\lfloor\frac{m}{k}\right\rfloor\sum_{p\in prime,p|k}\mu(\frac{k}{p})\\ k=1∑min(n,m)p∈prime,p∣k∑μ(pk)×⌊kn⌋×⌊km⌋k=1∑min(n,m)⌊kn⌋⌊km⌋p∈prime,p∣k∑μ(pk)
对于后面的∑p∈prime,p∣kμ(kp)\sum_{p\in prime,p|k}\mu(\frac{k}{p})∑p∈prime,p∣kμ(pk),可以预处理,先枚举质数,然后枚举倍数,然后计算贡献
对于前面的一段再整除分块就好了
时间复杂度 O(Tn)O(T\sqrt{n})O(Tn)
code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 10000010
using namespace std;
ll T,n,m,ans,w,p[N],g[N],mu[N],prime[N];
const ll MX=1e7;
void work()
{p[1]=mu[1]=1;for(ll i=2;i<=MX;++i){if(!p[i]){mu[i]=-1;prime[++w]=i;}for(ll j=1;j<=w&&i*prime[j]<=MX;++j){p[i*prime[j]]=1;if(i%prime[j]==0)break;else mu[i*prime[j]]=-mu[i];}}for(ll i=1;i<=w;++i)for(ll j=1;j*prime[i]<=MX;++j)g[j*prime[i]]+=mu[j];//对每个数提出一个质因数计算mu的贡献for(ll i=2;i<=MX;++i)g[i]+=g[i-1];return;
}
int main()
{scanf("%lld",&T);work();while(T--){scanf("%lld%lld",&n,&m);ans=0;for(ll l=1,r=0;l<=min(n,m);l=r+1){r=min(n/(n/l),m/(m/l));ans+=(n/l)*(m/l)*(g[r]-g[l-1]);}printf("%lld\n",ans);}return 0;
}
【数论】YY的GCD(P2257)相关推荐
- P2257 YY的GCD
P2257 YY的GCD 题意: 求 1≤x≤N,1≤y≤M1 \leq x \leq N,1 \leq y \leq M1≤x≤N,1≤y≤M 且gcd(x, y) 为质数的 (x,y) 有多少对. ...
- 洛谷 P2257 YY的GCD
YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定\(N\), \(M\) ,求\(1 \le x \le N,1 \le y \le M\)且\(gcd(x, y)\)为质数的\( ...
- [洛谷P2257] YY的GCD (莫比乌斯反演)
YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
- 洛谷P2257 YY的GCD 莫比乌斯函数反演+线性筛
洛谷P2257 YY的GCD 标签 莫比乌斯反演 线性筛 前言 这题貌似和莫反没多大关系,就是用到了一个莫比乌斯函数的性质了,其他就是推公式,优化和式. 我的第一道懵逼反演-真的好难好难-而且套路特别 ...
- [Luogu P2257] YY的GCD (莫比乌斯函数)
题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...
- BZOJ 2820 YY的GCD 莫比乌斯反演
2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...
- BZOJ 2820: YY的GCD
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1705 Solved: 908 [Submit][Status][Dis ...
- bzoj 2820: YY的GCD(莫比乌斯反演)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2111 Solved: 1137 [Submit][Status][Di ...
- [ bzoj2820] YY的GCD
[ bzoj2820] YY的GCD Time Limit : 3000 ms Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<= ...
- 【BZOJ 2820】 YY的GCD
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Submit: 807 Solved: 404 [ Submit][ Status] ...
最新文章
- 一文搞定cookie,session,token
- 可搜索本机文档内容软件:anytext(批量检索文档内容)(不是很好用,推荐用filelocator)
- QString之arg用法
- docker安装Zabbix
- Anaconda 下libsvm的安装
- go语言的rune类型
- 关于Adapter模式
- 生信技能树课程记录笔记(六)20220530
- 深度解读 AlphaGo 算法原理
- [生存志] 第91节 鬼谷捭阖之策
- matlab导入数据画二维云图,matlab中用xyz三组数据画出2维云图
- 在 Word 中如何画底线、直线、虚线?
- 算法核心-动态规划算法
- 资料:成为全栈dApp开发者的学习计划
- react 调用子(孙)组件方法
- 《高效的项目和团队》
- SQLite--SQLite的基本介绍和安装
- Java前端框架ZK的分页组件
- Android 设置应用的底部导航栏(虚拟按键)背景颜色
- DAC7512驱动原理
热门文章
- php按时间分组的sql语句,(SQL语句)按指定时间段分组统计
- php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程
- python 正则匹配 条件太多怎么办_Python条件正则表达式
- 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...
- 橡皮擦_日本推出改邪归正橡皮擦,看得我头顶一凉
- java中的线程不安全和实例解析
- 买卖股票类问题动态规划解法(Leetcode题解-Python语言)
- matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)
- 数据结构---简单插入排序
- 操作系统——缓冲区溢出