欧拉函数与欧拉定理

文章目录

  • AcWing 873. 欧拉函数
    • 题目链接
    • 欧拉函数
    • 欧拉函数的证明
    • 思路
    • CODE
    • 时间复杂度分析
  • AcWing 874. 筛法求欧拉函数
    • 题目链接
    • 问题分析与时间复杂度
    • CODE
    • 思路
  • 欧拉定理



AcWing 873. 欧拉函数

题目链接

https://www.acwing.com/activity/content/problem/content/942/


欧拉函数

对于正整数 n n n,欧拉函数是小于或等于 n n n 的正整数中与 n n n 互质的数的数目,记作 φ ( n ) φ(n) φ(n)
φ ( 1 ) = 1 φ(1)=1 φ(1)=1


欧拉函数的证明

基于容斥原理

所以归纳得到公式: K = N ( 1 − 1 / p 1 ) ( 1 − 1 / p 2 ) . . . ( 1 − 1 / p i ) K = N(1 - 1/p1)(1 - 1/p2)...(1 - 1/pi) K=N(11/p1)(11/p2)...(11/pi)


思路

按照分解质因数的逻辑挨个得到质因数,然后累乘即可。


CODE

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int phi(int x){int res = x;for(int i = 2; i <= x / i; ++i){if(x % i == 0){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;scanf("%d", &n);while (n -- ){int a;scanf("%d", &a);cout << phi(a) << endl;}
}

时间复杂度分析

复杂度瓶颈在于分解质因数,所以是 O ( n ) O(\sqrt{n}) O(n )



AcWing 874. 筛法求欧拉函数

题目链接

https://www.acwing.com/activity/content/problem/content/943/

问题分析与时间复杂度

对于范围内的每个数都求欧拉函数,肯定不能用定义法一个一个求,这样时间复杂度为 O ( n ⋅ n ) O(n·\sqrt n) O(nn ),我们可以用线性筛筛出质数再计算质因数,时间复杂度为 O ( n ) O(n) O(n)


CODE

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1e6 + 10;
int primes[N], eulers[N], cnt;
bool st[N];void get_eulers(int n){eulers[1] = 1;for(int i = 2; i <= n; ++i){if(!st[i]){primes[cnt++] = i;eulers[i] = i - 1;}for(int j = 0; primes[j] <= n / i; ++j){int t = primes[j] * i;st[t] = true;if(i % primes[j] == 0){eulers[t] = eulers[i] * primes[j];break;}eulers[t] = eulers[i] * (primes[j] - 1);}}
}int main(){int n;scanf("%d", &n);get_eulers(n);long long res = 0;for(int i = 1; i <= n; ++i) res += eulers[i];cout << res << endl;
}

思路

主要有三点:

  • 如果 i 是质数:那么[1, i - 1]都是i的质因数,所以有
    eulers[i] = i - 1;
    
  • 如果 i 不是质数:那么它会被筛掉,这里有两种情况:
    • primes[j]i的最小质因子时:
      • i * primes[j]的欧拉函数是这样的: K = i ∗ p r i m e s [ j ] ∗ ( 1 − 1 / p 1 ) . . . ( 1 − 1 / p i ) K = i * primes[j] * (1 - 1/p1)...(1 - 1/pi) K=iprimes[j](11/p1)...(11/pi)我们会发现整个式子化简得到: K = e u l e r s [ i ] ∗ p r i m e s [ j ] K = eulers[i] * primes[j] K=eulers[i]primes[j]也就是说是i的欧拉函数乘上了最小质因子primes[j]的值。
    • primes[j]不是i的最小质因子时:
      • i * primes[j]的欧拉函数是这样的: K = i ∗ p r i m e s [ j ] ∗ ( 1 − 1 / p 1 ) . . . ( 1 − 1 / p i ) ( 1 − 1 / p r i m e s [ j ] ) K = i * primes[j] * (1 - 1/p1)...(1 - 1/pi)(1 - 1/primes[j]) K=iprimes[j](11/p1)...(11/pi)(11/primes[j])虽然primes[j]不是i的最小质因子,但是是primes[j] * i的最小质因子,所以需要多乘上 1 − 1 / p r i m e s [ j ] 1 - 1/primes[j] 11/primes[j]。化简得: K = e u l e r s [ i ] ∗ ( p r i m e s [ j ] − 1 ) K = eulers[i] * (primes[j] - 1) K=eulers[i](primes[j]1)


欧拉定理

a a a n n n 互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} ≡ 1(mod\ n) aφ(n)1(mod n)

证明:
1 1 1 ~ n n n 中,设 n n n 的欧拉函数为 a 1 , a 2 , . . . , a φ ( n ) a_1, a_2, ...\ , a_{φ(n)} a1,a2,... ,aφ(n),那么全部乘上 a a a 得到 a a 1 , a a 2 , . . . , a a φ ( n ) aa_1, aa_2, ...\ ,aa_{φ(n)} aa1,aa2,... ,aaφ(n),那么得到如下式子: a φ ( n ) ( a 1 , . . . , a i ) ≡ ( a 1 , . . . , a i ) ( m o d n ) a^{φ(n)}(a_1, ...\ , ai) ≡ (a1, ...\ ,ai)\ \ (mod\ n) aφ(n)(a1,... ,ai)(a1,... ,ai)  (mod n)两边消去得到欧拉定理: a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} ≡ 1(mod\ n) aφ(n)1(mod n)

n , a n, a n,a 互质时,可以得到费马定理: a n − 1 ≡ 1 ( m o d n ) a^{n - 1} ≡ 1(mod\ n) an11(mod n)

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

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

相关文章

Keil新建STM32软件工程 - (详细步骤图文)

文章目录 1. 前言2. 下载芯片对应的Keil开发包3. 下载芯片对应的标准外设库 - STM32F10x_StdPeriph_Lib_Vx.x.x4. 新建工程文件夹 - Demo34.1 移植标准外设库4.2 启动文件介绍及如何选择 5. 新建软件工程 - Demo5.1 打开Keil → Project → New uVision Project5.2 选择芯片型号…

从头到尾的数据之旅

目录 引言 链表介绍 单向链表的接口实现 结构 创建节点 头插 尾插 头删 尾删 打印 节点查找 节点前插入 节点删除 内存释放 总结 引言 在前面的学习中&#xff0c;我们深入了解了顺序表&#xff0c;通过其增删查改的操作&#xff0c;我们发现了顺序表在某些情况…

如何批量给文件名加相同字段?

如何批量给文件名加相同字段&#xff1f;文件名批量修改是一项蕴藏了非常多知识的电脑操作技能&#xff0c;批量修改文件名称不仅仅是修改名称这么简单&#xff0c;有时候我们还可能需要批量王文件名称中添加一些相同的文字字段&#xff0c;批量操作注重的是高效率&#xff0c;…

《Vue.js设计与实现》—Vue3响应系统的原理

一、响应式数据与副作用函数 1. 副作用函数 1-1 指令材料 在JavaScript中&#xff0c;副作用函数是指在执行过程中对外部环境产生可观察的变化或影响的函数。这种函数通常会修改全局变量、修改传入的参数、执行I/O操作&#xff08;如读写文件或发送网络请求&#xff09;、修…

论文阅读《Learning Adaptive Dense Event Stereo from the Image Domain》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Cho_Learning_Adaptive_Dense_Event_Stereo_From_the_Image_Domain_CVPR_2023_paper.html 概述 事件相机在低光照条件下可以稳定工作&#xff0c;然而&#xff0c;基于事件相机的立体方法在域迁移时性…

【教程】开始使用ipaguard进行代码加固混淆

开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术&#xff0c;可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护&#xff0c;防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard通过…

springMVC 学习总结(三) 拦截器及统一异常处理

一.拦截器 1.拦截器与过滤器的区别 拦截器 Interceptor 和 过滤器 Filter类似&#xff0c;主要用于拦截用户请求并作出一定处理操作&#xff0c; 但两则也有不同之处&#xff0c;如过滤器只在Servlet前后起作用&#xff0c;是Servlet规范定义的&#xff0c;是Servlt容器才支…

NGINX高性能服务器与关键概念解析

目录 1 NGINX简介2 NGINX的特性3 正向代理4 反向代理5 负载均衡6 动静分离7 高可用8 结语 1 NGINX简介 NGINX&#xff08;“engine x”&#xff09;在网络服务器和代理服务器领域备受推崇。作为一款高性能的 HTTP 和反向代理服务器&#xff0c;它以轻量级、高并发处理能力以及…

2-1基础算法-枚举/模拟

文章目录 1.枚举2.模拟 1.枚举 [例1] 特别数的和 评测系统 #include <iostream> using namespace std; bool pa(int x) {while (x) {if (x % 10 2 || x % 10 1 || x % 10 0 || x % 10 9) {return true;}else {x x / 10;}}return false; } int main() {int sum0;i…

【pytest】单元测试文件的写法

前言 可怜的宾馆&#xff0c;可怜得像被12月的冷雨淋湿的一条三只腿的黑狗。——《舞舞舞》 \;\\\;\\\; 目录 前言test_1或s_test格式非测试文件pytest.fixture()装饰器pytestselenium test_1或s_test格式 要么 test_前缀 在前&#xff0c;要么 _test后缀 在后&#xff01; …

低压无功补偿在分布式光伏现场中的应用

摘要&#xff1a;分布式光伏电站由于建设时间短、技术成熟、收益明显而发展迅速&#xff0c;但光伏并网引起用户功率因数异常的问题也逐渐凸显。针对分布式光伏电站接入配电网后功率因数降低的问题&#xff0c;本文分析了低压无功补偿装置补偿失效的原因&#xff0c;并提出了一…

代码随想录算法训练营第46天| 139.单词拆分 多重背包

JAVA代码编写 139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 **注意&#xff1a;**不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s &…

Java - JVM内存模型及GC(垃圾回收)机制

JVM内存模型 JVM堆内存划分&#xff08;JDK1.8以前&#xff09; JVM堆内存划分&#xff08;JDK1.8之后&#xff09; 主要变化在于&#xff1a; java8没有了永久代&#xff08;虚拟内存&#xff09;&#xff0c;替换为了元空间&#xff08;本地内存&#xff09;。常量池&#…

数据库中常用的锁

目录 1、数据库中常用的锁类型 2、常见的数据库 3、以MySQL为例 3.1 MySQL的事务 3.2 MySQL事务的四大特性 1. 原子性&#xff08;Atomicity&#xff09; 2. 一致性&#xff08;Consistency&#xff09; 3. 隔离性&#xff08;Isolation&#xff09; ⭐mysql中的事务隔…

temu上传产品的素材哪里找

在为Temu&#xff08;拼多多跨境电商平台&#xff09;上传产品时&#xff0c;您需要准备一些高质量的素材&#xff0c;包括图片和视频。这些素材对于吸引用户的注意力、展示产品的特点以及提高购买意愿非常重要。但是&#xff0c;很多卖家都不知道从哪里找到这些素材。本文将为…

【Deeplearning4j】小小的了解下深度学习

文章目录 1. 起因2. Deeplearning4j是什么3. 相关基本概念4. Maven依赖5. 跑起来了&#xff0c;小例子&#xff01;6. 鸢尾花分类代码 7. 波士顿房价 回归预测代码 8. 参考资料 1. 起因 其实一直对这些什么深度学习&#xff0c;神经网络很感兴趣&#xff0c;之前也尝试过可能因…

Unity-小工具-LookAt

Unity-小工具-LookAt &#x1f959;介绍 &#x1f959;介绍 &#x1f4a1;通过扩展方法调用 gameObject.LookAtTarget&#xff0c;让物体转向目标位置 &#x1f4a1;gameObject.StopLookat 停止更新 &#x1f4a1;可以在调用时传入自动停止标记&#xff0c;等转向目标位置后自…

.net 洋葱模型

洋葱架构 内层部分比外层更抽象(内层接口&#xff0c;外层实现)。外层的代码只能调用内层的代码&#xff0c;内层的代码可以通过依赖注入的形式来间接调用外层的代码 简单的例子&#xff0c;引用依赖图 demo 接口类库 EmailInfo using System; using System.Collections.…

Python安装包(模块)的八种方法,Python初学者必备知识点

文章目录 1. 使用 easy\_install2. 使用 pip install3. 使用 pipx4. 使用 setup.py5. 使用 yum6. 使用 pipenv7. 使用 poetry8. 使用 curl 管道关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Py…

轻量封装WebGPU渲染系统示例<44>- 材质组装流水线(MaterialPipeline)之灯光和阴影(源码)

目标: 数据化&#xff0c;模块化&#xff0c;自动化 备注: 从这个节点开始整体设计往系统规范的方向靠拢。之前的都算作是若干准备。所以会和之前的版本实现有些差异。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sa…