首页 > 其他分享 >2024-03-28

2024-03-28

时间:2024-03-28 21:44:07浏览次数:21  
标签:lfloor 03 right frac sum 28 rfloor 2024 left

2024-03-28

\({\color{Red}\Large到成都集训来了!}\)

晚上自习

YY的GCD

\({\color{Chocolate}Problem}\)
\(i\in[1,n],j\in[1,m] \ \ \ m,n\le10^7\),\(T\le10^4\) 组询问,求 \(\gcd(i,j)\) 是素数的 \((i,j)\) 对数

\({\color{Chocolate}Solution}\)

\[\begin{align*} ans&=\sum_{p\in primes}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=p]\newline &=\sum_{p\in primes}\sum_{i=1}^{\left\lfloor\frac{n}{p}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{p}\right\rfloor}[\gcd(i,j)=1] \end{align*} \]

莫比乌斯函数有一个小性质

\[\sum_{d\mid x}\mu(d)=[x=1] \]

\[\therefore[gcd(i,j)=1]=\sum_{d\mid\gcd(i,j)}\mu(d) \]

\[\therefore ans=\sum_{p\in primes}\sum_{i=1}^{\left\lfloor\frac{n}{p}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{p}\right\rfloor}\sum_{d\mid\gcd(i,j)}\mu(d) \]

考虑改变求和顺序
先枚举 \(k=\gcd(i,j)\),则 \(i,j\) 均是 \(k\) 的倍数

\[ans=\sum_{p\in primes}\sum_{k=1}^{\min(\left\lfloor\frac{n}{p}\right\rfloor,\left\lfloor\frac{m}{p}\right\rfloor)}\sum_{d\mid k}\mu(d)\times\left\lfloor\frac{n}{pk}\right\rfloor\times\left\lfloor\frac{m}{pk}\right\rfloor \]

接下来(按照题解说的)是常见的变换方式
设 \(t=pk\)

\[\begin{align*} ans&=\sum_{p\in primes}\sum_{k=1}^{\min(\left\lfloor\frac{n}{p}\right\rfloor,\left\lfloor\frac{m}{p}\right\rfloor)}\sum_{d\mid k}\mu(d)\times\left\lfloor\frac{n}{t}\right\rfloor\times\left\lfloor\frac{m}{t}\right\rfloor\newline &=\sum_{t=1}^{\min(n,m)}\left\lfloor\frac{n}{t}\right\rfloor\times\left\lfloor\frac{m}{t}\right\rfloor\sum_{p\in primes,p\mid t} \mu(\frac{t}{p}) \end{align*} \]

\(k\) 的约数不用再枚举的原因是:\(t\) 实际上枚举的是 \(p\)和 \(k\)的所有约数 的乘积,已经考虑过了

最后面的和式可以在线性筛的时候预处理
剩下的数论分块

时间复杂度 \(O(n+T\sqrt{n})\)

\({\color{Chocolate}Code}\)

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

typedef long long ll;

const int N=1e7+100;

ll n,m;

int primes[N],cntp;
bool st[N];
int mu[N];
ll sm[N];

void init_mu(int mx) {
	mu[1]=1;
	for(int i=2;i<=mx;i++) {
		if(!st[i]) primes[++cntp]=i,mu[i]=-1;
		for(int j=1;i*primes[j]<=mx;j++) {
			st[i*primes[j]]=true;
			if(i%primes[j]==0) {
				mu[i*primes[j]]=0;
				break;
			}
			mu[i*primes[j]]=-mu[i]; 
		}
	}
	for(int j=1;j<=cntp;j++)
		for(int i=1;i*primes[j]<=mx;i++)
			sm[i*primes[j]]+=mu[i]*1ll;
	for(int i=1;i<=mx;i++) sm[i]+=sm[i-1];
}

int main() {
	init_mu(1e7+10);
	int T;
	scanf("%d",&T);
	while(T--) {
		scanf("%lld%lld",&n,&m);
		if(n>m) swap(n,m);
		ll lft=1,rgh,ans=0;
		while(lft<=n) {
			rgh=min(n,min(n/(n/lft),m/(m/lft)));
			ans+=(sm[rgh]-sm[lft-1])*(n/lft)*(m/lft);
			lft=rgh+1;
		}
		printf("%lld\n",ans); 
	}
	
	return 0;
} 

GCD SUM

做完前边几个题,这个就很简单了

不写解析了

完蛋还没写完但是要回去了


标签:lfloor,03,right,frac,sum,28,rfloor,2024,left
From: https://www.cnblogs.com/Orange-Star/p/18102620

相关文章

  • 03
    [一]基本数据类型【1】学习变量的目的学习变量有助于我们在程序中存储和操作数据,提高代码的灵活性和可维护性。通过使用变量,我们可以方便地引用和修改数据,使得程序能够动态地响应不同的输入和条件。【2】学习基本数据类型的目的学习基本数据类型有助于我们理解不同类型的......
  • 2024.3.28
    2024.3.28【浮世景色百千年依旧,人之在世却如白露与泡影。】Thursday二月十九<theme=oi-"string">今天神奇模拟赛)A.水水题题目描述给定若干个串,对于每个串,求出所有可能的串使得这些可能的串既是原串的前缀又是原串的后缀。输入格式若干行,表示若干个原串输出格式......
  • [省选联考 2024] 重塑时光
    [省选联考2024]重塑时光因为太弱了而感觉网上过的题解都不够详细清晰!所以写了篇题解!估计也会成为我后面给初中的学弟学妹们讲题的题目之一,前提是没有其他人要选它首先,肯定要将概率转为方案数若我们已经将一个排列划分成了\(k+1\)块(有空的)且已经重新拼接成了一条新的时间线......
  • 云计算笔记03--配置yum源及下载nginx并上传项目至服务器(常用命令 lrzsz cat head tail
    配置yum源首先将系统自带的yum源进行备份cd/etc/yum.repos.d///进入到yum配置目录mkdirbackup//创建一个备份目录mv*.repobackup///将所有以.repo结尾的文件移动到备份目录中#阿里云的yum源网站:https://developer.aliyun.com/......
  • 重生前端之我在javascript敲代码(03-数组)
    一.数组(重点)思考:如何保存一个班级的所有学生的姓名?回答:一种方法利用前面学习过的知识,则每一条信息都需要一个变量去保存,缺点是这样做很麻烦,而且容易出错,又不合理;另一种方法就是利用数组。概念:数组是存储一系列值的变量集合,可以存储多个值。1.1语法数组构成:数组由一个或......
  • 2024年3月28日-UE5-地图触发器,摄像机控制,后期盒子,关卡蓝图
    在全局蓝图里加一句简单的话测试下 然后选打印输入一句话 新建一个触发框 调整位置 然后改名 创建一个平面放到之前触发框的位置 选中关卡触发器,然后打开关卡蓝图然后右键点击,然后选第一个,为这个关卡触发器添加逻辑   当ACTOR进入触发器区域,输出前......
  • 新增文章(2024-3-28)
    //controllerpackagecom.di.bigevent.controller;importcom.di.bigevent.pojo.Article;importcom.di.bigevent.pojo.Result;importcom.di.bigevent.service.ArticleService;importcom.di.bigevent.utils.JwtUtil;importjakarta.servlet.http.HttpServletResponse......
  • P1037 [NOIP2002 普及组] 产生数 python 题解
    原题链接:产生数原理解释本题就是基本的dfs,对每一个数遍历深搜,得到他能变化的所有情况,最后相乘就是结果,网上都是c的解法,需要用到高精度,但是python可以处理大数,不需要。vis[]判断该数是否变换过,防止重复以n=123,k=2,变换列表x=[1,3],y=[3,4],即1->3,3->4:先遍历1:遍历......
  • 2024天府杯全国大学生数学建模A题思路+模型+代码+论文
    2024天府杯数学建模竞赛A题思路模型代码:3.28第一时间更新,更新见文末名片A题:科研绩效分配方案设计与优化问题背景:科学研究领域的绩效评定有着较大的共性和行业典型特点,在高校科研人员日常管理工作中也是一项较复杂的研究性、政策性工作。科技部、教育部、......
  • 展望2024
    PHP程序员展望2024:技术趋势与职业发展随着2023年的结束,我们站在了2024年的起点上,作为PHP程序员,我们不仅要关注技术的最新发展,还要思考如何将这些变化融入我们的职业生涯中。在这篇博客中,我将与大家分享我对2024年PHP技术趋势和职业发展的展望。一、技术趋势:创新与发展并行PHP......