欧拉函数与筛法求欧拉函数

目录

  • 欧拉函数
    • 欧拉函数的定义
    • 欧拉函数的公式
    • 欧拉函数的公式推导
    • 欧拉定理
    • 典型例题
    • 代码实现
  • 筛法求欧拉函数
    • 思路分析
    • 经典例题
    • 代码实现


欧拉函数

欧拉函数的定义

对于任意正整数 n n n,欧拉函数 φ ( n ) φ(n) φ(n) 表示小于或等于 n n n 的正整数中,与 n n n 互质的正整数个数。

例如:

  • φ ( 1 ) = 1 φ(1) = 1 φ(1)=1,因为 1 1 1 只与 1 1 1 互质。
  • φ ( 6 ) = 2 φ(6) = 2 φ(6)=2,因为与6互质的数有 1 1 1 和 $5,共 2 2 2 个。
  • φ ( 10 ) = 4 φ(10) = 4 φ(10)=4,因为与10互质的数有 1 、 3 、 7 1、3、7 137 9 9 9,共 4 4 4 个。

欧拉函数的公式

对于任意正整数 n n n φ ( n ) = n ∗ ( 1 − 1 P 1 ) ∗ ( 1 − 1 P 2 ) ∗ . . . ∗ ( 1 − 1 P k ) φ(n) = n * (1 - \frac{1}{P_1}) * (1 - \frac{1}{P_2}) * ... * (1 - \frac{1}{P_k}) φ(n)=n(1P11)(1P21)...(1Pk1),其中, P 1 , P 2 , . . . , P k P_1, P_2, ..., P_k P1,P2,...,Pk n n n 的不同的质因数。

欧拉函数公式,只与因子相关,与指数无关。

例如:
φ ( 10 ) = 10 ∗ ( 1 − 1 2 ) ∗ ( 1 − 1 5 ) = 4 φ(10) = 10 * (1 - \frac{1}{2}) * (1 - \frac{1}{5}) = 4 φ(10)=10(121)(151)=4
φ ( 15 ) = 15 ∗ ( 1 − 1 3 ) ∗ ( 1 − 1 5 ) = 8 φ(15) = 15 * (1 - \frac{1}{3}) * (1 - \frac{1}{5}) = 8 φ(15)=15(131)(151)=8


欧拉函数的公式推导

利用容斥原理的推导过程:

对数字N进行质因数分解,可得
N = P 1 r 1 ∗ P 2 r 2 ∗ P 3 r 3 ∗ . . . ∗ P k r k N=P_1^{r_1}*P_2^{r_2}*P_3^{r_3}*...*P_k^{r_k} N=P1r1P2r2P3r3...Pkrk

由于不能与 N N N 不互质,所以 1 1 1 ~ N N N 不可包含 P 1 , P 2 , . . . , P k P_1,P_2,...,P_k P1,P2,...,Pk 这些质因子。

P 1 , P 2 , . . . , P k P_1,P_2,...,P_k P1,P2,...,Pk 的倍数都减去,分别减去 N P 1 , N P 2 , . . . , N P k \frac{N}{P_1},\frac{N}{P_2},...,\frac{N}{P_k} P1N,P2N,...,PkN 个。

如图所示:
在这里插入图片描述

但是由于 P 1 , P 2 , . . . , P k P_1,P_2,...,P_k P1,P2,...,Pk 不同质因子的倍数可能会出现重复,有些数重叠的数会被多次减去。如图中重叠部分会被多次相减,因此要补上重叠的数。比如某个数,是 P 2 P_2 P2 的倍数,也是 P 3 P_3 P3 的倍数,就减了两回,还需要再加回来 P 2 ∗ P 3 P_2∗P_3 P2P3 的倍数,换做是其他的组合就是 N P 1 ∗ P 2 , N P 1 ∗ P P 3 , . . . , N P 1 ∗ P k , . . \frac{N}{P_1*P_2},\frac{N}{P_1*P_P3},...,\frac{N}{P_1*P_k},.. P1P2N,P1PP3N,...,P1PkN,..

但是更多质因子重叠的部分又会弥补至减去之前的状态,得继续减去。如 P 1 ∗ P 2 ∗ P 3 P_1*P_2*P_3 P1P2P3这样的更多质因子重叠的部分,而后就像之前一样一减一加最终推出结果。

φ ( N ) = N ∗ ( 1 − 1 P 1 ) ∗ ( 1 − 1 P 2 ) ∗ . . . ∗ ( 1 − 1 P k ) φ(N) = N * (1 - \frac{1}{P_1}) * (1 - \frac{1}{P_2}) * ... * (1 - \frac{1}{P_k}) φ(N)=N(1P11)(1P21)...(1Pk1)


欧拉定理

如果 a a a n n n 是正整数,且 a a a n n n 互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} ≡ 1 (\mod n) aφ(n)1(modn)
如果 n n n 为质数,则 a n − 1 ≡ 1 ( m o d n ) a^{n-1} ≡ 1 (\mod n) an11(modn)


典型例题

题目描述:
给定 n 个正整数 ai,请你求出每个数的欧拉函数。

输入格式:
第一行包含整数 n。

接下来 n 行,每行包含一个正整数 ai。

输出格式:
输出共 n 行,每行输出一个正整数 ai 的欧拉函数。

数据范围:
1 ≤ n ≤ 100 , 1 ≤ a i ≤ 2 × 1 0 9 1≤n≤100,1≤a_i≤2×10^9 1n100,1ai2×109

输入样例:

3
3
6
8

输出样例:

2
2
4

代码实现

res对不同的质数只需计算一次,不要将res的计算放到循环中。
res计算过程中要避免出现小数的情况,将除法提前与大数进行。

#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;int phi(int x)
{int res = x;for (int i = 2; i <= x / i; ++i){if (x % i) continue;// res对不同的质数只需计算一次,不要将res的计算放到循环中res = res / i * (i - 1); // 注意避免出现小数情况while (x % i == 0) x /= i;}if (x > 1) res = res / x * (x - 1);return res;
}
int main()
{int n;cin >> n;while (n--){int a;cin >> a;cout << phi(a) << endl;}return 0;
}

筛法求欧拉函数

思路分析

  • 如果这个数是质数,那么对质数 i i i 的欧拉函数值是 p h i [ i ] = i − 1 phi[i]=i−1 phi[i]=i1
  • 如果 i i i % p r i m e s [ j ] = = 0 primes[j] == 0 primes[j]==0,那么 p h i [ i ∗ p r i m e s [ j ] ] = p h i [ i ] × p r i m e s [ j ] phi[i*primes[j]]=phi[i]×primes[j] phi[iprimes[j]]=phi[i]×primes[j]。(相当于 i i i 中的质因子包括了 p r i m e s [ j ] primes[j] primes[j]
  • 如果 i i i % p r i m e s [ j ] primes[j] primes[j] ! = 0 != 0 !=0,那么 p h i [ i ∗ p r i m e s [ j ] ] = p h i [ i ] × ( p r i m e s [ j ] − 1 ) phi[i*primes[j]]=phi[i]×(primes[j] - 1) phi[iprimes[j]]=phi[i]×(primes[j]1)。(通过公式变形得来)

经典例题

题目描述:
给定一个正整数 n n n,求 1 1 1 ~ n n n 中每个数的欧拉函数之和。

输入格式:
共一行,包含一个整数 n n n

输出格式:
共一行,包含一个整数,表示 1 1 1 ~ n n n 中每个数的欧拉函数之和。

数据范围:
1 < n < 1 0 6 1<n<10^6 1<n<106

输入样例:

6

输出样例:

12

代码实现

#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;const int N = 1e6 + 10;
int phi[N], primes[N], cnt;
bool st[N];
void get_eulers(int n)
{for (int i = 2; i <= n; ++i){phi[1] = 1;if (!st[i]){phi[i] = i - 1;primes[cnt++] = i;}for (int j = 0; primes[j] <= n / i; ++j){st[primes[j] * i] = true;if (i % primes[j] == 0){phi[primes[j] * i] = phi[i] * primes[j];break;}phi[primes[j] * i] = phi[i] * (primes[j] - 1);}}
}
int main()
{int n, res = 0;cin >> n;get_eulers(n);for (int i = 1; i <= n; ++i) res += phi[i];cout << res << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/75169.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【视觉SLAM入门】5.1. 特征提取和匹配--FAST,ORB(关键点描述子),2D-2D对极几何,本质矩阵,单应矩阵,三角测量,三角化矛盾

"不言而善应" 0. 基础知识1. 特征提取和匹配1.1 FAST关键点1.2 ORB的关键点--改进FAST1.3 ORB的描述子--BRIEF1.4 总结 2. 对极几何&#xff0c;对极约束2.1 本质矩阵(对极约束)2.1.1 求解本质矩阵2.1.2 恢复相机运动 R &#xff0c; t R&#xff0c;t R&#xff0c;…

修改状态栏The application could not be installed: INSTALL_FAILED_ABORTEDList

打开theme修改状态栏为可见。 <resources xmlns:tools"http://schemas.android.com/tools"><!-- Base application theme. --><style name"Base.Theme.MyApplication" parent"Theme.AppCompat.DayNight"><!-- Customize yo…

[JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 文章目录 系列文章目录前言一、本章节…

呼吸灯——FPGA

文章目录 前言一、呼吸灯是什么&#xff1f;1、介绍2、占空比调节示意图 二、系统设计1、系统框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.0 2、vscode 3、板子型号&#xff1a;EP4CE6F17C8 要求&#xff1a; 将四个LED灯实现循环…

电缆故障综合测试仪

一、电缆故障查找仪产品简介 本产品用于地埋电缆故障点的快速、企业产品免费信息发布平台定位、电缆埋设路径及埋设深度的电子商务测&#xff08;在故障点处获取深度&#xff09;。 主要特点 1、用特殊结构的声波振动传感器及低噪声专用器件作前置放大&#xff0c;提高了仪器定…

VLT:Vision-Language Transformer用于引用的视觉语言转换和查询生成分割

摘要 在这项工作中&#xff0c;我们解决了引用分割的挑战性任务。引用分割中的查询表达式通常通过描述目标对象与其他对象的关系来表示目标对象。因此&#xff0c;为了在图像中的所有实例中找到目标实例&#xff0c;模型必须对整个图像有一个整体的理解。为了实现这一点&#…

鸿蒙4.0发布会说了啥?关注个性与效率,小艺智能程度令人惊艳

鸿蒙4.0系统的发布会已经结束&#xff0c;整个发布会看下来&#xff0c;给我最深刻的印象就是——鸿蒙4.0是一个让手机更接近个人终端的系统。但选择系统难免掺杂个人喜好和偏见&#xff0c;因此本文我只会从鸿蒙4.0那些让我感到惊喜的功能入手介绍&#xff0c;不对系统进行评价…

【Golang 接口自动化01】使用标准库net/http发送Get请求

目录 发送Get请求 响应信息 拓展 资料获取方法 发送Get请求 使用Golang发送get请求很容易&#xff0c;我们还是使用http://httpbin.org作为服务端来进行演示。 package mainimport ("bytes""fmt""log""net/http""net/url&qu…

Vue 自定义事件绑定与解绑

绑定自定义事件 说到 Vue 自定义事件&#xff0c;那就需要搞清楚一个问题&#xff0c;为啥有这个玩意。 说到自定义事件之前&#xff0c;需要理解 组件基础的概念。理解了基础概念之后&#xff0c;我们就知道 Vue 的父子之间的通信&#xff0c; 一是 父组件通过 Prop 向子组件…

8.3day04git+数据结构

文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 安装g…

抽象工厂模式(Abstract Factory)

抽象工厂模式提供一个创建一组相关或相互依赖的对象的接口&#xff0c;而无须指定它们具体的类&#xff0c;每个子类可以生产一系列相关的产品。 The Abstract Factory Pattern is to provide an interface for creating families of related or dependent objects without s…

谷歌: 安卓补丁漏洞让 N-days 与 0-days 同样危险

近日&#xff0c;谷歌发布了年度零日漏洞报告&#xff0c;展示了 2022 年的野外漏洞统计数据&#xff0c;并强调了 Android 平台中长期存在的问题&#xff0c;该问题在很长一段时间内提高了已披露漏洞的价值和使用。 更具体地说&#xff0c;谷歌的报告强调了安卓系统中的 &quo…

Matlab对TMS320F28335编程--SVPWM配置互补PWM输出

前言 F28335中断 目的&#xff1a;FOC的核心算法及SVPWM输出&#xff0c;SVPWM的载波频率10kHz&#xff0c;SVPWM的每个周期都会触发ADC中断采集相电流&#xff0c;SVPWM为芯片ePWM4、5、6通道&#xff0c;配置死区 1、配置中断SVPWM进ADC中断&#xff0c;查上表知CPU1,PIE1 …

回归分析书籍推荐

回归分析在线免费书籍&#xff1a;I 1-ntroduction to Regression Methods for Public Health using R Introduction to Regression Methods for Public Health Using R 2-An Introduction to Statistical Learning https://hastie.su.domains/ISLR2/ISLRv2_website.pdf 可以…

【Jmeter】压测mysql数据库中间件mycat

目录 背景 环境准备 1、下载Jmeter 2、下载mysql数据库的驱动包 3、要进行测试的数据库 Jmeter配置 1、启动Jmeter图形界面 2、加载mysql驱动包 3、新建一个线程组&#xff0c;然后如下图所示添加 JDBC Connection Configuration 4、配置JDBC Connection Configurati…

vue运行在IE浏览器空白报错SCRIPT1006: 缺少‘)‘ -【vue兼容IE篇】

其他浏览器均正常&#xff0c;但是切换ie模式&#xff0c;打开空白&#xff0c;F12打开报错缺少‘)‘ &#xff0c;如下图 在搜狗浏览器下点开报错&#xff1a;定格在crypto-js处 解决&#xff1a; 步骤一&#xff1a;使用npm安装babel-polyfill 依赖&#xff08;已安装了可忽…

AI赋能转型升级 助力打造“数智辽宁”——首次大模型研讨沙龙在沈成功举行

当前&#xff0c;以“ChatGPT”为代表的大模型正在引领新一轮全球人工智能技术发展浪潮&#xff0c;推动人工智能从以专用小模型定制训练为主的“手工作坊时代”&#xff0c;迈入以通用大模型预训练为主的“工业化时代”&#xff0c;正不断加速实体经济智能化升级&#xff0c;深…

主流CRM有哪些特点和优势?

现如今&#xff0c;CRM系统是企业实现数字化转型&#xff0c;提高销售收入的首选工具。但市场上有众多CRM品牌&#xff0c;每家都有自己的特点和优势&#xff0c;企业该如何进行选择&#xff1f;下面我们就来进行主流CRM系统比较&#xff0c;并说说什么CRM产品比较好? 主流CR…

学习笔记|C251|STC32G单片机视频开发教程(冲哥)|第三集:开发环境搭建和程序下载

文章目录 1.STC-ISP软件的下载2.STC32手册下载3.PDF阅读器下载4.学会PDF阅读器查阅手册5.跟着手册搭建C251开发环境Tips:如何同时安装Keil的C51、C251和MDK 6.程序包的下载7.第一个工程的编译和下载 原作者/主讲人&#xff1a;冲哥 原始视频地址 1.STC-ISP软件的下载 STC-ISP …

Clickhouse 优势与部署

一、clickhouse简介 1.1 clickhouse介绍 ClickHouse的背后研发团队是俄罗斯的Yandex公司&#xff0c;2011年在纳斯达克上市&#xff0c;它的核心产品是搜索引擎。我们知道&#xff0c;做搜索引擎的公司营收非常依赖流量和在线广告&#xff0c;所以做搜索引擎的公司一般会并行推…