首页 > 其他分享 >P2257 YY的GCD

P2257 YY的GCD

时间:2023-07-31 20:47:07浏览次数:51  
标签:lfloor mu frac GCD int P2257 tot YY fo

传送门
首先得到一个非常显然的柿子

\[\sum_{p} \sum_{d} \lfloor\frac{n}{pd}\rfloor \lfloor\frac{m}{pd}\rfloor \]

我们可以考虑T=pd,然后转化柿子

\[\sum _{T} \lfloor\frac{n}{T} \rfloor \lfloor\frac{m}{T} \rfloor \sum_{p|T}\mu(\frac{T}{p}) \]

后面这一块可以预处理。然后就是经典的分块,为什么要设T=pd,是因为我们如果你枚举的是p,那么你的d还是要分块,受到n,m的制约,而将其看为一个整体之后我们就可以预处理跟n,m无关的信息,从而快速回答询问。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define A puts("YES")
#define B puts("NO")
using namespace std;
typedef long long ll;
const int N=1e7+5;
int p[N],tot,f[N],mu[N];
int t[N],n,m,j,k;
ll ans;
bool vis[N];

int main(){
//	freopen("data.in","r",stdin);
	mu[1]=1;
	fo(i,2,N-1){
		if (!vis[i]) {
			f[i]=i-1;
			mu[i]=-1;
			p[++tot]=i;
		}
		fo(j,1,tot) {
			if ((ll)i*(ll)p[j] >= N) break;
			vis[i*p[j]]=1;
			if (i%p[j]==0) {
				f[i*p[j]]=f[i]*p[j];
				break;
			}
			else {
				f[i*p[j]]=f[i]*(p[j]-1);
				mu[i*p[j]]=-mu[i];
			}
		}	
	}
	
	fo(i,1,tot) {
		fo(j,1,(N-1)/p[i]) { 
			t[p[i]*j]+=mu[j];
		}
	}
	fo(i,1,N-1) t[i]+=t[i-1];
	
	
	int Q;
	scanf("%d",&Q);
	while (Q--){
		scanf("%d %d",&n,&m);
		
		ans=0;
		j=1;
		while (j<=min(n,m)) {
			k=min(n/(n/j), m/(m/j));
			ans+=(ll)(n/j)*(ll)(m/j)*(ll)(t[k]-t[j-1]);
			j=k+1;
		}
		printf("%lld\n",ans);
	
	}
	
	return 0;
}

标签:lfloor,mu,frac,GCD,int,P2257,tot,YY,fo
From: https://www.cnblogs.com/ganking/p/17594424.html

相关文章

  • GCD
    GCD洛谷题目描述一张图有\(n\)个节点,编号为\(1,2,3,\dots,n\)。其中\(i\)号节点会向\(j\)号节点连一条边权为\(|i-j|\)的无向边,当且仅当\(\gcd(i,j)=i,\operatorname{lcm}(i,j)=j\)时连边。现询问\(q\)次,每次询问求\(x\)到\(y\)的最短路径。输入格式第一......
  • #yyds干货盘点#JavaScript正则表达式(手机号码、邮箱、日期)
    JavaScript正则表达式(手机号码、邮箱、日期)在平时的工作中,经常会遇到一些验证的功能,其中如号码、邮箱、日期之类的验证,但是在平常使用时,直接就抄了一份用,并没有很详细的研究过,所以就在这儿记录了一些常用的表达式,慢慢学习的同时,也分享给大家。手机号码由于现在虚拟号码的使用,所以......
  • #yyds干货盘点#python 正则表达式 re 模块总结
    使用爬虫爬取网页数据的过程中,需要利用各种工具解析网页中的数据,比如:etree,BeautifulSoup,scrapy 等工具,但是功能最强大的还是正则表达式,下面将对python的re模块方法做一个总结。Python 通过 re 模块提供对正则表达式的支持。使用 re 的一般步骤是:使用 re.compile(正则表......
  • hdu7319 String and GCD
    StringandGCD首先我们需要用kmp的fail建树,然后需要利用到欧拉反演。\[n=\sum_{d|n}\varphi(d)\]对于这题来说\[(i,j)=\sum_{d|(i,j)}\varphi(d)=\sum_{d|i,d|j}\varphi(d)\]那么我们只需要用一个桶存每个约数从根到当前节点出现了多少次。然后枚举约数也有一个技巧,具体......
  • # yyds干货盘点 # 使用Python统计下桌面某个文件夹下(含多层子文件夹)具体文件的数量(方
    大家好,我是皮皮。一、前言前几天在Python最强王者群【东哥】问了一个Python自动化办公的问题,一起来看看吧。这个是他自己在实际工作中遇到的需求,正好遇到了这个问题,想着用Python来实现下。二、实现过程上一篇文章中已经分享了一个方法,这一篇文章继续分享另外一个方法,由【巭孬嫑勥烎......
  • 【模板】数论基础:exGCD,exCRT,inverse,Lucas,BSGS,primitive root
    7.29数论WIP\(a\equivb\pmodp\Rightarrow\frac{a}{d}\equiv\frac{b}{d}\pmod{\frac{p}{d}},d=\gcd(a,b,p)\)。exGCD若\((a,b)=1\),则\(0\leqx<b\),\(ax\bmodb\)互不相同,有一个是\(1\)。证明:\(ax_1\equivax_2\pmodb\)则\((x_1-x_2)a|b\),因为......
  • YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用
    (2|YAML缩进、分离、注释简单使用)1简介YAML不是一种标记语言,而是一种数据格式;使用缩进和分离来表示数据结构,不需要使用额外的标记语言。2缩进使用缩进来表示嵌套关系;标识方式为使用空格;缩进必须使用相同数量的空格;比如以下每个列表项都由一个连字符开头,后面跟着一......
  • YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
    (3|YAML集合、结构、标量、标记使用)1集合YAML支持三种集合类型:列表,映射和集。1.1列表列表是一种序列结构,它使用连字符“-”表示;如下三个元素的列表,元素之间用“-”:fruit:-apple-rubber-pear使用Pyyaml解析:#解析withopen("config_jihe.yaml")asf:......
  • yygh-site项目搭建
    使用nuxt.js搭建项目nuxt.js:是一个基于Vue.js的通用应用框架,一个用于Vue.js开发SSR应用的一站式解决方案。SSR:服务器端渲染,首屏渲染快、利于SEO、可以生成缓存片段,生成静态化文件、节能(对比客户端渲染的耗电)基础环境搭建一、下载template压缩包https://github.com/nux......
  • mysql 时间加一年并转为YYYYMMdd
    MySQL时间加一年并转为YYYYMMddMySQL是一种常见的关系型数据库管理系统,用于存储和管理数据。在数据库中,我们经常需要对日期和时间进行操作和计算。本文将介绍如何使用MySQL将时间加一年并转换为YYYYMMdd的格式。为什么需要加一年并转换格式?在实际应用中,经常需要对日期进行加减操......