当前位置: 首页 > news >正文

算法板子:欧拉函数——求一个数的欧拉函数、线性时间内求1~n所有数的欧拉函数

目录

1. 欧拉函数

(1)概念

(2)性质

(3)计算公式

2. 求一个数的欧拉函数

(1)模拟过程

(2)代码 

3. 线性时间内求1~n所有数的欧拉函数——筛法求欧拉函数

(1)要点

(2)代码

1. 欧拉函数

(1)概念

给一个整数n,求n的欧拉函数就是求1~n中有几个数和n互质。互质就是两个整数除了1以外没有其他的公约数。

(2)性质

(3)计算公式

2. 求一个数的欧拉函数

(1)模拟过程

(2)代码 
#include <iostream>
using namespace std;// 求x这个数的欧拉函数
int phi(int x)
{// res代表1~x中与x互质的数的个数int res = x;// i从2枚举到根号xfor (int i = 2; i <= x / i; i ++ ){// 如果i是x的质因子if (x % i == 0){// 记得先除质因子再乘质因子减一; 先乘法可能会爆intres = res / i * (i - 1);while (x % i == 0) x /= i;}}// 如果最终x>1, 代表最终x也是原x的质因子; 所以就除质因子再乘质因子减一if (x > 1) res = res / x * (x - 1);return res;
}int main()
{int n;cin >> n;while (n --){int x;cin >> x;cout << phi(x) << endl;}return 0;
}

3. 线性时间内求1~n所有数的欧拉函数——筛法求欧拉函数

(1)要点

可以在线性的时间内求出1~n所有数的欧拉函数,时间复杂度比上一种更小,模版类似筛法求质数。

(2)代码
#include <iostream>
using namespace std;const int N = 1e6 + 10;
int n;// vis[i]代表i这个数是否是合数; vis[4]=1代表4这个数是合数, vis[3]=0代表3这个数是质数
// p[i]代表第1~n中i个质数的值; p[1]=2代表1~n中第1个质数是2
// cnt代表1~n中质数的个数
int vis[N], p[N], cnt;
// phi[i]代表i这个数的欧拉函数; phi[5]=4代表5这个数的欧拉函数为4(跟5互质的数有1,2,3,4)
int phi[N];// 求1~n所有数的欧拉函数
void get_phi(int n)
{// 特判1的欧拉函数phi[1] = 1;// 求2~n所有数的欧拉函数for (int i = 2; i <= n; i ++ ){// 如果i是质数, 记录在p数组中, 并且质数的欧拉函数是质数减一if (!vis[i]) p[ ++ cnt] = i, phi[i] = i - 1;// j从1开始枚举for (int j = 1; 1LL * i * p[j] <= n; j ++ ){// 记录i*p[j]是合数vis[i * p[j]] = 1;// 求i*p[j]的欧拉函数if (i % p[j] == 0) {phi[i * p[j]] = phi[i] * p[j];break;}else phi[i * p[j]] = phi[i] * (p[j] - 1);}}
}int main()
{cin >> n;// 得到1~n所有数的欧拉函数, 记录在phi数组中get_phi(n);long long res = 0;for (int i = 1; i <= n; i ++ ) res += phi[i];cout << res << endl;return 0;
}

相关文章:

算法板子:欧拉函数——求一个数的欧拉函数、线性时间内求1~n所有数的欧拉函数

目录 1. 欧拉函数 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;性质 &#xff08;3&#xff09;计算公式 2. 求一个数的欧拉函数 &#xff08;1&#xff09;模拟过程 &#xff08;2&#xff09;代码 3. 线性时间内求1~n所有数的欧拉函数——筛法求欧拉函…...

2024牛客暑期多校训练营8

文章目录 A. Haitang and GameE.Haitang and MathJ. Haitang and TriangleK. Haitang and Ava A. Haitang and Game 通过审题可以知道&#xff0c;最后的胜者和若干次操作后最多能增加的数的奇偶有关。 由于 a i a_i ai​ 较小&#xff0c;所以我们枚举每一个没出现过的 x …...

git的一些操作指令

一、git 提交规范 commit message subject &#xff1a; 空格 message 主体 feat: 新功能&#xff08;feature&#xff09;用于提交新功能。fix: 修复 bug用于提交 bug 修复。docs: 文档变更用于提交仅文档相关的修改。style: 代码风格变动&#xff08;不影响代码逻辑&…...

【IT行业研究报告】Internet Technology

一、引言 随着信息技术的飞速发展&#xff0c;IT行业已成为全球经济的重要驱动力。从云计算、大数据、人工智能到物联网&#xff0c;IT技术正深刻改变着各行各业的生产方式、商业模式和人们的生活方式。本报告旨在深入分析IT行业的现状、发展趋势和挑战&#xff0c;探讨其在各…...

GLM大模型的机器翻译能力测试

背景介绍 最近想对GLM-4今年发布的几个大模型 glm-4-0520&#xff0c;glm-4-air以及glm-4-flash简单评测一下它们的机器翻译能力&#xff0c;由于这几个大模型的容量和训练数据都有区别&#xff0c;所以它们的翻译能力也是不同的。我们这里就分别选择一些有趣的&#xff0c;有…...

【硬件产品经理】汽车A样设计

目录 简介 制造方式 作者简介 简介 一般被称作原型样件(Prototype)。 主要是根据系统需求设计,实现基本功能和关键尺寸,用于基本功能的验证,用于初期产品软件调试和Hil台架测试(Hardware in Loop,硬件在环)的样机阶段。 也就说在设计初期,A样的主要目的可以划分…...

Ubuntu22.04系统中安装机器人操作系统ROS

在Ubuntu 22.04上安装ROS&#xff08;Robot Operating System&#xff09;的过程可以分为几个主要步骤。请注意&#xff0c;ROS有不同的版本&#xff08;如ROS 1的Melodic、Noetic等&#xff0c;以及ROS 2的Foxy、Humble等&#xff09;&#xff0c;这些版本对Ubuntu的支持程度可…...

LeetCode54题:螺旋矩阵(原创)

【题目描述】 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a;mat…...

FPGA常见型号

FPGA&#xff08;现场可编程门阵列&#xff09;开发板种类繁多&#xff0c;涵盖了从入门级教育用途到高性能工业应用的广泛领域。以下是一些常见的 FPGA 开发板型号及其特点&#xff1a; 1. Xilinx&#xff08;赛灵思&#xff09;系列 Xilinx 是 FPGA 领域的领导者之一&#…...

【多模态大模型】FlashAttention in NeurIPS 2022

一、引言 论文&#xff1a; FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 作者&#xff1a; Stanford University 代码&#xff1a; FlashAttention 特点&#xff1a; 该方法提出将Q、K、V拆分为若干小块&#xff0c;使执行注意力时不需要频…...

过滤器doFilter 方法

在Java EE中&#xff0c;过滤器的放行是指在过滤器的 doFilter 方法中调用 FilterChain 对象的 doFilter 方法&#xff0c;将请求传递给下一个过滤器或目标 servlet 进行处理。这个过程可以理解为过滤器的责任链传递。 过滤器的 doFilter 方法 在过滤器中&#xff0c;实现 Fil…...

WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框 CheckBox继承于ToggleButton&#xff0c;而ToggleButton继承于ButtonBase基类。 案例 前端代码 <StackPanel Orientation"Horizontal" HorizontalAlignment"Center" VerticalAlignment"Center"><TextBlock Text"…...

【机器学习基础】线性回归

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…...

java基础概念12-二维数组

一、二维数组的定义 二维数组可以被视为数组的数组&#xff0c;即每个元素都是一个数组。 二维数组的应用场景&#xff1a; 当我们需要把数据分组管理的时候&#xff0c;就需要用到二维数组。 二、二维数组的初始化 2-1、静态初始化 阿里巴巴规范手册&#xff1a; // 静态初始…...

56 锐键交换机开局

锐键交换机开局 一 锐键视图切换 1 Ruijie> 用户视图 2 Ruijie# 特权模式 3 Ruijie(config)# 全局配置模式 4 Ruijie(config-if-GigabitEthernet 1/1/1)# 接口配置模式 5 Ruijie(config)#show vlan 6 exit (退出) 7 enable(进入)...

VR虚拟展厅与传统实体展厅相比,有哪些优势?

视创云展虚拟展厅相比传统的实体展厅具有多方面的优势&#xff0c;主要体现在以下几个方面&#xff1a; 1、降低成本&#xff1a; 虚拟展厅无需租赁或建设物理空间&#xff0c;减少了场地、装修和维护等方面的开支。同时&#xff0c;参观者和参展商无需现场参观或布展&#x…...

Vue的事件处理、事件修饰符、键盘事件

目录 1. 事件处理基本使用2. 事件修饰符3. 键盘事件 1. 事件处理基本使用 使用v-on:xxx或xxx绑定事件&#xff0c;其中xxx是事件名&#xff0c;比如clickmethods中配置的函数&#xff0c;都是被Vue所管理的函数&#xff0c;this的指向是vm或组件实例对象 <!DOCTYPE html&g…...

c++单例实践

C单例实践 在日常开发中&#xff0c;虽然太多的单例调用会让代码的耦合度变高&#xff0c;但是例如日志类这种&#xff0c;单例模式就变得非常有。所以这篇文章为大家介绍static 关键字相关知识以及如何实现自己的C单例类。 static关键字 首先让我们请出今天的主角: static。…...

SQL注入实例(sqli-labs/less-9)

0、初始页面 1、爆库名 使用python脚本 def inject_database1(url):name for i in range(1, 20):low 32high 128mid (low high) // 2while low < high:payload "1 and if(ascii(substr(database(),%d,1)) > %d ,sleep(2),0)-- " % (i, mid)res {"…...

http不同类型方法的作用,get和post区别

在HTTP协议中&#xff0c;不同的请求方法用于不同的操作。常见的HTTP方法包括GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH等&#xff0c;每种方法有其特定的作用。 常见的HTTP方法及其作用 1. GET - **作用**: 从服务器请求指定资源。GET方法通常用于获取数据而不会修改数据…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...