P2158 [SDOI2008]仪仗队&&欧拉函数的求法

P2158 [SDOI2008] 仪仗队 —— 欧拉函数 φn。 阅读详情

Label

欧拉函数(此处将此题作为欧拉函数模板套路题分析)

Description

https://www.luogu.com.cn/problem/P2158

Solution

本题思路

我们首先转化题意:假设当前C君站在(0,0)(0,0)(0,0)处,右上角坐标为(n−1,n−1)(n-1,n-1)(n−1,n−1),那么:设一名站在坐标(x,y)(x,y)(x,y)处的学生:

​ 若该学生不能被看见,当且仅当∃d∈N(d∣x∧d∣y)\exist d\in N(d|x\land d|y)∃d∈N(d∣x∧d∣y)

进一步转化条件:如果该学生能被看见,则说明┐∃d∈N(d∣x∧d∣y)\urcorner\exist d\in N(d|x\land d|y)┐∃d∈N(d∣x∧d∣y),那么***从质因子分解的角度考虑***,此时x,yx,yx,y不存在相同的质因子,进而说明x,yx,yx,y互质。

所以,站在坐标(x,y)(x,y)(x,y)处的学生能被看见等价于gcd(x,y)=1gcd(x,y)=1gcd(x,y)=1(x,yx,yx,y互质)

考虑欧拉函数的定义:φ(n)=∑i=1n[gcd(i,n)==1]\varphi(n)=\sum_{i=1}^{n}[gcd(i,n)==1]φ(n)=∑i=1n​[gcd(i,n)==1],即:φ(n)\varphi(n)φ(n)表示[1,n][1,n][1,n]内与nnn互质的数的个数。

那么,对于此题,答案即为3+2∑i=2nφ(i)3+2\sum_{i=2}^{n}\varphi(i)3+2∑i=2n​φ(i)。(1、考虑(x,y),(y,x)(x,y),(y,x)(x,y),(y,x)同时合法/不合法;2、(0,1),(1,0),(1,1)(0,1),(1,0),(1,1)(0,1),(1,0),(1,1)处的学生一定可以被看见,(0,x),(x,0)(x>1)(0,x),(x,0)(x>1)(0,x),(x,0)(x>1)的学生一定不能被看见)。

总结:涉及到gcd(x,y)gcd(x,y)gcd(x,y)取值可能为1的问题,往往需要用到欧拉函数。

求φ(1)∼φ(n)\varphi(1)\sim\varphi(n)φ(1)∼φ(n)的方法
O(nn)O(n\sqrt n)O(nn​)求法

由于φ(n)=n∏pp∣np−1p\varphi(n)=n\prod_{p}^{p|n}\frac{p-1}{p}φ(n)=np∏p∣n​pp−1​,故我们可以对1∼n1\sim n1∼n内的每个数进行质因子分解即可。

int Phi(int x)//求phi(x)一般用利用容斥原理推出的公式,O(sqrt(n)) 
{
	ri phix=x;
	for(ri i=2;i*i<=x;++i)
		if(x%i==0)
		{
			phix=phix/i*(i-1);
			while(x%i==0)	x/=i;//由于i|x,故不会出现精度问题
		}
	if(x>1)	phix=phix/x*(x-1);//注意可能大于sqrt(x)的质因子
	return phix;
}
O(n)O(n)O(n)求法

一般的O(n)O(n)O(n)做法利用了线性筛(欧拉筛)法的良好性质。

进行筛法的过程中,对于素数nnn,直接令φ(n)=n−1\varphi(n)=n-1φ(n)=n−1即可。关键在于怎么把非素数的欧拉函数表示出来。

由于线性筛具有“每一个数只会被其最小的质因子筛去”的优秀性质,故我们可以考虑合数n=p×kn=p\times kn=p×k在被它的最小质因子ppp筛去时,利用φ(p)\varphi(p)φ(p)与φ(k)\varphi(k)φ(k)的值来求φ(n)\varphi(n)φ(n)(此处线性筛外层循环枚举待筛数的最大因子的筛取性质证得:若kkk为合数,当线性筛外层循环循环至kkk时,kkk是否为素数及φ(k)\varphi(k)φ(k)已被求出)。

1、p∣kp|kp∣k

此时说明nnn只含一个值为ppp的素因子(不是只含一个素因子),由于欧拉函数满足积性函数的性质,故当gcd(k,p)=1gcd(k,p)=1gcd(k,p)=1时,φ(n)=φ(pk)=φ(p)φ(k)=(p−1)k\varphi(n)=\varphi(pk)=\varphi(p)\varphi(k)=(p-1)kφ(n)=φ(pk)=φ(p)φ(k)=(p−1)k。

2、p∤kp\nmid kp∤k

此时p∣gcd(k,p)p|gcd(k,p)p∣gcd(k,p),φ(n)≠φ(pk)=φ(p)φ(k)\varphi(n)\neq\varphi(pk)=\varphi(p)\varphi(k)φ(n)​=φ(pk)=φ(p)φ(k)。

为了推得正确的公式,我们先证明几个引理:

引理1:设ppp为质数,则φ(pk)=pk−pk−1\varphi(p^{k})=p^k-p^{k-1}φ(pk)=pk−pk−1

证明:因为pkp^{k}pk只含ppp一个质因子,故[1,pk][1,p^k][1,pk]内所有与ppp不互质的数的集合可表示成{x∣xp,1≤x≤pk−1,x∈N}\{x|xp,1\leq x\leq p^{k-1},x\in N\}{x∣xp,1≤x≤pk−1,x∈N}。这个集合的元素个数为pk−1p^{k-1}pk−1个,那么[1,pk][1,p^k][1,pk]内与pkp^kpk互质的元素个数即为pk−pk−1p^k-p^{k-1}pk−pk−1,即φ(pk)=pk−pk−1\varphi(p^{k})=p^k-p^{k-1}φ(pk)=pk−pk−1

引理2:设ppp为质数,则φ(pk+1)=p×φ(pk)\varphi(p^{k+1})=p\times\varphi(p^k)φ(pk+1)=p×φ(pk)

证明:由引理1,得:

​ φ(pk+1)=pk+1−pk=p(pk−pk−1)=p×φ(pk)\varphi(p^{k+1})=p^{k+1}-p^{k}=p(p^k-p^{k-1})=p\times\varphi(p^k)φ(pk+1)=pk+1−pk=p(pk−pk−1)=p×φ(pk)

由以上两个引理及积性函数性质,可推得:

设n=p×kn=p\times kn=p×k,ppp为素数且p∣kp|kp∣k,则有:φ(n)=p×φ(k)\varphi(n)=p\times \varphi(k)φ(n)=p×φ(k)

证明:设nnn不含因子ppp的最大因子为mmm,则:

φ(n)=φ(p×k)=φ(pt×m)=φ(pt)φ(m)=pφ(pt−1)φ(m)=pφ(pt−1m)=pφ(k)\varphi(n)=\varphi(p\times k)=\varphi(p^{t}\times m)=\varphi(p^t)\varphi(m)=p\varphi(p^{t-1})\varphi(m)=p\varphi(p^{t-1}m)=p\varphi(k)φ(n)=φ(p×k)=φ(pt×m)=φ(pt)φ(m)=pφ(pt−1)φ(m)=pφ(pt−1m)=pφ(k)

其中t≥2,t∈Nt\geq2,t\in Nt≥2,t∈N

所以,对于∀n∈N+∀p(p∣n)\forall n\in N^{+}\forall p(p|n)∀n∈N+∀p(p∣n),有:

(1) φ(n)=φ(p)φ(np)=(p−1)φ(np),p2∤n\varphi(n)=\varphi(p)\varphi(\frac{n}{p})=(p-1)\varphi(\frac{n}{p}),p^2\nmid nφ(n)=φ(p)φ(pn​)=(p−1)φ(pn​),p2∤n

(2) φ(n)=pφ(np),p2∣n\varphi(n)=p\varphi(\frac{n}{p}),p^2|nφ(n)=pφ(pn​),p2∣n

所以,在线性筛的第二层循环时,每利用一个primeprimeprime筛去某个数时,直接利用上述公式将被筛数的φ\varphiφ值求出即可。

以上便是求φ(1)∼φ(n)\varphi(1)\sim\varphi(n)φ(1)∼φ(n)的O(n)O(n)O(n)方法

Code

#include<cstdio>
#include<iostream>
#define ri register int
using namespace std;

const int MAXN=4e4+20;
int N,prime[MAXN>>2],phi[MAXN],cnt,ans=3;
bool isprime[MAXN];

void Phi()//O(n)求1~N的欧拉函数 
{
	isprime[1]=true; phi[1]=1;
	for(ri i=2;i<=N;++i)
	{
		if(!isprime[i])
		{
			prime[++cnt]=i;
			phi[i]=i-1;	
		}
		for(ri j=1;j<=cnt&&i*prime[j]<=N;++j)
		{
			isprime[i*prime[j]]=true;
			if(i%prime[j]==0)	phi[i*prime[j]]=phi[i]*prime[j];
			else	phi[i*prime[j]]=phi[i]*phi[prime[j]];
			if(i%prime[j]==0)	break;//这句话不能提前,否则无法处理phi[i*i](i均为质数) 
		}
	}
}

int main()
{
	scanf("%d",&N);
	Phi();
	if(N==1) { cout<<"0"; return 0; }
	for(ri i=2;i<=N-1;++i)
		ans+=phi[i]<<1;
	cout<<ans;
	return 0;
}
基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题 阅读详情

相关推荐

P1072 [NOIP2009 提高组] Hankson 的趣味题

gcd与lcm的算术基本定理表现形式

guapi2333的博客 474

P2158 SDOI2008-仪仗队

前置知识欧拉定理题意简析题目可以简化为求斜率个数(同一斜率上的点只能看到一个)由 k=y/x 可知 k=y/x=py/px则已知 互质的 x,y 可以得出一个新的 k则题意转化为求 gcd(x,y)=1 的个数此处有几个坑点:观察者所处未知为(0,0)则边界应为 n-1边界还有两个斜率未被纳入计算k=1 的斜率被重复计算,需要被减去 1代码实现#include<iostream> #i...

Anubis 164

DIY压电陶瓷传感器信号放大:从拆解到JFET电路实战(附示波器实测数据)

本文详细介绍了如何利用废旧设备拆解的压电陶瓷片,结合JFET(结型场效应管)高输入阻抗特性,DIY搭建高灵敏度振动传感器放大电路。从元件拆解、参数实测到JFET共源极放大器实战搭建与调试,提供了完整的步骤、示波器实测数据及优化方案,帮助电子爱好者实现低功耗振动检测应用。

weixin_29195615的博客 387

洛谷P2158 [SDOI2008] 仪仗队

作为体育委员,C 君负责这次运动会仪仗队的训练。仪仗队是由学生组成的 �×�N×N 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。对于 100%100% 的数据,1≤�≤400001≤N≤40000。输出一行一个数,即 C 君应看到的学生人数。一行,一个正整数 �N。

weixin_72639015的博客 253

告别色差!用Python+TCS34725颜色传感器实现精准色彩还原(附完整校准代码)

本文详细介绍了如何利用Python和TCS34725颜色传感器实现专业级色彩还原方案。通过双阶校准法(白光校准和黑电平校准)和进阶的光照自适应技术,解决传感器原始数据不准的问题,并提供完整的校准代码和实战案例,帮助开发者实现ΔE<3的高精度色彩识别。

weixin_30836759的博客 209

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

P2158 [SDOI2008]仪仗队(C++_数论_(筛法_递推)/(莫比乌斯反演)/(欧拉函数))

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。 输入格式 共一个数N 输出格式 共一个数,即C君应看到的学生人数。 输入输出样例 输入 #1 4 输出 #1 9 说明/提示 【数据规模和约...

ccql's Blog 807

基于DO-178C/331的飞控软件研发环境的研究

本研究提出了一套基于DO-178C/331标准的飞控系统软件开发和验证框架。通过优化模型库的设计、代码生成配置和测试验证流程,显著提升了飞控系统软件的开发效率和安全性。未来的研究可以进一步扩展模型库的功能,以适应更复杂的飞控系统需求。

qq_41854911的博客 561

【题解】poj3090 Visible Lattice Points(同洛谷P2158 [SDOI2008]仪仗队) 欧拉函数

题目链接 Description A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), other than the origin, is visible from the origin if the line from (0, 0) to (x, y)...

翻过这座山,他们就会听到你的故事 482

【文献笔记】ICCV 2021 | Point Transformer

作者提到,特别适合点云处理,因为自注意力机制是的核心,本质上就是一个集合算子:它对输入元素具有顺序不变性和数量不变性3D点云是无序的,即使改变点云txt文件中的点顺序也不会有任何影响。自注意力机制天然具有排列不变性,因为它通过对所有"点对"的关系进行建模来处理输入,而不依赖于任何特定的输入顺序点云数据通常覆盖了3D空间中的对象或场景,理解这些数据需要捕捉点与点之间复杂的空间关系。自注意力机制能够有效的捕捉这些关系,因为它为每个"点对"赋予一个。

m0_55908255的博客 965

大厂校招:星宸科技嵌入式面试及参考答案(5万字长文)

当一个新的硬件设备被插入系统时,内核会发送一个设备事件通知 udev,udev 会根据设备的属性和规则,为该设备创建一个合适的设备文件。通过去除不必要的驱动程序、禁用不需要的功能、选择合适的内核配置选项、优化内核编译选项和定制内核模块等方法,可以减小内核的大小和复杂性,提高系统的性能和稳定性。上半部通常是在中断关闭的情况下执行的,以确保中断处理的原子性。处理碎片化内存是内存管理中的一个重要问题,可以采用内存压缩、内存池管理、伙伴系统、首次适应算法和最佳适应算法等方法来减少内存碎片的产生,提高内存的利用率。

大模型大数据攻城狮的专栏 2927

P2158 [SDOI2008] 仪仗队

这道题是一道欧拉函数的例题,但由于欧拉函数覆盖的数学前置知识有亿点多。当然你也可以看一看 oi-wiki 上的但我们这里还是会讲的。

TLSnail 974

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

莫比乌斯反演 做题记录

来自Peterwuyihong 的题单。 前置知识 前置芝士1 数论分块 UVA11526 H(n) P2261 [CQOI2007]余数求和 P2260 [清华集训2012]模积和 其中有一个式子需要注意一下:\[\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\dfrac{n}{i}\right\rfloor\left\lfloor\dfrac{m}{i}\righ...

EricQian的博客 362

SAP GUI 经典事务在 Fiori Launchpad 中的穿越之道:原理、配置与实践指南

在许多企业的 S/4HANA 或 ECC 系统里,经典 SAP GUI 事务依旧承载着关键业务。如何把这些老将自然地嵌入到 Fiori Launchpad,让用户在统一入口里无缝切换新旧 UI,是项目中经常遇到的主题。本文结合社区博文、官方文档与实际项目经验,系统梳理这一过程的技术原理、配置步骤、性能优化以及常见坑点,并给出贴近中国读者的案例解析与改进建议。阅读完毕,你将不仅知道怎么做,还会理解。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

P2158 [SDOI2008]仪仗队(欧拉函数&莫反)

P2158 [SDOI2008]仪仗队(欧拉函数&莫反) 考虑不同的斜率个数,则求∑i=1n∑i=1n[gcd(i,j)=1]\sum\limits_{i=1}^n\sum\limits_{i=1}^n [gcd(i,j)=1]i=1∑n​i=1∑n​[gcd(i,j)=1] 转换一下:∑i=1n∑i=1n[gcd(i,j)=1]\sum\limits_{i=1}^n\sum\limits_{i=1}^n [gcd(i,j)=1]i=1∑n​i=1∑n​[gcd(i,j)=1] φ(i)=∑j=1i

Harris-H的博客 627

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

洛谷 P2158 [SDOI2008]仪仗队(gcd)

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。 输入格式 共一个数N 输出格式 共一个数,即C君应看到的学生人数。 输入输出样例 输入 #1 4 输出 #1 9 说明/提示 【数据规模和约定】 对于 100% 的数据,1 ≤ N ≤ 40000 对拍代码: .

C_Dreamy的博客 947

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[SDOI2008] 仪仗队【欧拉函数】

        题目传送门         首先我们对矩阵进行重新编排,以n=5n=5n=5为例 (0,4)  (1,4)  (2,4)  (3,4)  (4,4)(0,3)  (1,3)  (2,3)  (3,

Yucohny 263

欧拉函数-洛谷P2303 [SDOi2012]Longge的问题

https://www.luogu.org/problem/show?pid=2303 欧拉函数,这种数学题基本上就是看到题目懵逼,看题解时大悟,写代码是大雾; 我们聊聊简单的欧拉函数; 欧拉函数是小于等于n的数中与n互质的数的数目; 例如φ(8)=4,因为1,3,5,7均和8互质; φ(5)=4,φ(1)=1; 通式: 其中p1, p2……pn为x的所有质因数...

weixin_30275415的博客 203

【洛谷题解/SDOI2008】P2158 仪仗队

山东省选2008真题仪仗队题解

lovely_cyqの小窝 551

P2158 [SDOI2008]仪仗队

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。  现在,C君希望你告诉他队伍整齐时能看到的学生人数。 输入输出格式 输入格式:   共一个数N   输出格式:   共一个数,即C君应看到的学生人数。   输入输出样例 ...

qq_37551863的博客 339

P2158 [SDOI2008]仪仗队 题解

旅行传送门:https://www.luogu.com.cn/problem/P2158 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。 输入格式 共一个数N 输出格式 共一个数,即C君应看到的学生人数。 输入输出样例 输入 #1复制 4 输出 #1复制 9 解题思路 以左下角C君所在的点为原点,第

Foxreign的博客 1168

HDMI接口电路设计实战:从引脚定义到PCB布局的完整指南

本文详细解析了HDMI接口电路设计的关键要点,从引脚定义到PCB布局的完整指南。重点介绍了TMDS差分信号组、控制信号组和状态检测信号的设计技巧,以及PCB布局布线中的分层策略与阻抗控制。通过实战经验分享,帮助工程师避免常见设计陷阱,提升HDMI接口电路的可靠性和性能。

weixin_30342209的博客 595

线性筛(P3383 【模板】线性筛素数)

线性筛学习

guapi2333的博客 863

CF1500B(Div.1) Two chandeliers

EXCRT+二分答案

guapi2333的博客 362
上一篇: 线性筛(P3383 【模板】线性筛素数)
下一篇: P2568&&bzoj2818 GCD
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值