LGOJ2257 YY的GCD
这题美好体验就是卡常
Description
求
\]
其中:\(1\leq n,m \leq 10^7\),多组询问
Solution
对于这种与\(gcd\)相关的反演题,有一个好的套路
设\(f(d)=[gcd(i,j)=d]\),\(F(n)\)为\(gcd(i,j)=d\)和\(d\)的倍数的个数,即:
\]
\]
\]
由着这个套路,我们开始化简这个式子
\]
将\(f(p)\)带入:
\]
把\(f(x)\)换成\(F(x)\)
\]
我们枚举\(\lfloor \frac{d}{p} \rfloor\)
\]
再把\(F(dp)\)换成最终式:
\]
令\(T=dp\),则有:
\]
\]
推到这里,我们就都可以做了
\(\mu(\space)\)可以线性筛,其他的可以整除分块
CODE
#include<bits/stdc++.h>
#define reg register
using namespace std;
namespace yspm{
	inline int read()
	{
		int res=0,f=1; char k;
		while(!isdigit(k=getchar())) if(k=='-') f=-1;
		while(isdigit(k)) res=res*10+k-'0',k=getchar();
		return res*f;
	}
	const int N=10000010;
	bool vis[N]; int pri[N],mu[N],g[N],cnt;
	#define ll long long
	ll sum[N];
	inline void prework()
	{
		mu[1]=1;
		for(reg int i=2;i<N;++i)
		{
			if(!vis[i]){mu[i]=-1;pri[++cnt]=i;}
			for(reg int j=1;j<=cnt&&pri[j]*i<N;++j)
			{
				vis[i*pri[j]]=1;
				if(i%pri[j]==0) break;
				else mu[pri[j]*i]-=mu[i];
			}
		}
		for(reg int j=1;j<=cnt;++j)
		{
			for(reg int i=1;i*pri[j]<N;++i) g[i*pri[j]]+=mu[i];
		}
		for(reg int i=1;i<N;++i) sum[i]=sum[i-1]+(ll)g[i];
		return ;
	}
	inline void work()
	{
		int n=read(),m=read(); if(n>m) swap(n,m);
		ll ans=0;
		 for(reg int l=1,r;l<=n;l=r+1)
		 {
		 	r=min(n/(n/l),m/(m/l));
		 	ans+=1ll*(n/l)*(m/l)*(sum[r]-sum[l-1]);
		 }printf("%lld\n",ans);
		return ;
	}
	signed main()
	{
		prework(); int T=read(); while(T--) work();
		return 0;
	}
}
signed main(){return yspm::main();}
不禁感叹一句,能让 \(yspm\) 这种信奉 \(define \space int \space long \space long\) 的人都不全用 $ long \space long $ 的得是什么卡常\(sb\)题呀!!!
LGOJ2257 YY的GCD的更多相关文章
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
		
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
 - [BZOJ2820]YY的GCD
		
[BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...
 - bzoj 2820 YY的GCD 莫比乌斯反演
		
题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...
 - 【BZOJ】【2820】YY的GCD
		
莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...
 - 【莫比乌斯反演】关于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 (莫比乌斯+分块)
		
YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...
 - 【BZOJ2820】YY的GCD(莫比乌斯反演)
		
[BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...
 - YY的GCD
		
YY的GCD 给出T个询问,询问\(\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)\in prime)\),T = 10000,N, M <= 10000000. 解 显然质 ...
 - 洛谷【P2257】YY的GCD
		
YY的GCD 原题链接 这应该是我做的第一道莫比乌斯反演的题目. 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x ...
 
随机推荐
- Servlet详细教程
			
Servlet简介 servlet是Server Applet的简称,翻译过来就是服务程序.好吧,这么说你可能还是不太懂,简单的讲,这个servlet是运行在服务器上的一个小程序,用来处理服务器请求的 ...
 - jvm调优原则
			
合理规划jvm性能调优 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响.但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松.为了 ...
 - 数的划分(DFS、DP)
			
https://www.luogu.com.cn/problem/P1025 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是 ...
 - ansible-playbook权限提升多种方式
			
ansible-playbook 可以方便快速的批量执行部署和运维任务,对于不同的场景和服务器,需要使用不同的权限提升方式. 最佳实现:为了提高playbook的兼容性,跟功能没有直接关系的权限提升脚 ...
 - Java学习十三
			
学习内容: 1.Java反射 2.jdbc入门 1.反射的概述 Java的反射机制:动态获取信息以及动态调用对象方法 Java的反射机制的作用:用来编写一些通用性较高的代码或者框架的时候使用 原理:j ...
 - java笔记——手写+键入
			
Frame.setDefaultCloseOpreation() Default:默认的 设置默认关闭操作 (0:什么都不干: 1:隐藏窗口: 2:关闭窗口但继续运行程序: 3:关闭窗口关闭程序:) ...
 - 记录一次URL中有特殊字符怎么处理?
			
你out了,赶紧换 RestTemplate 吧! 进入正题,直接实战!!! import java.util.HashMap; import java.util.Map; import org.ju ...
 - JS用例
			
showBtn :class="{getInput:showBtn}"v-if="showBtn" showBtn: true, this.showBtn = ...
 - linux的vi编辑器中如何查找内容(关键字)
			
按下”/“键,这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了. 找到相关文字以后: (1)按下小写n,向下查找 (2)按下大写N,向上查找
 - 2019牛客网暑假多校训练第四场  K —number
			
链接:https://ac.nowcoder.com/acm/contest/884/K来源:牛客网 题目描述 300iq loves numbers who are multiple of 300. ...