首页 > 其他分享 >数论-欧拉函数 学习笔记

数论-欧拉函数 学习笔记

时间:2022-10-28 10:31:57浏览次数:83  
标签:数论 ll 笔记 int ans rea 定理 欧拉


一、欧拉函数

1.欧拉函数的定义

欧拉函数(Euler’s totient function),即 ,表示的是小于等于

比如说

当 n 是质数的时候,显然有

2.欧拉函数的一些性质

  • 欧拉函数是积性函数。
    积性是什么意思呢?如果有,那么
    特别地,当 是奇数时

  • 利用​​莫比乌斯反演​​ 相关知识可以得出。
    也可以这样考虑:如果,那么
    如果我们设 表示 的数的个数,那么
    根据上面的证明,我们发现,,从而 。注意到约数 具有对称性,所以上式化为
  • ,其中 是质数,那么
    (根据定义可知)
  • 由唯一分解定理,设,其中 是质数,有
    证明:
  • 引理:设 为任意质数,那么
    证明:显然对于从 1 到 的所有数中,除了 的倍数以外其它数都与 互素,故 ,证毕。

接下来我们证明 。由唯一分解定理与

3.如何求欧拉函数值

如果只要求一个数的欧拉函数值,那么直接根据定义质因数分解的同时求就好了。这个过程可以用 ​​Pollard Rho​​ 算法优化。

int euler_phi(int n) {
int m = int(sqrt(n + 0.5));
int ans = n;
for (int i = 2; i <= m; i++)
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}

注:如果将上面的程序改成如下形式,会提升一点效率:

int euler_phi(int n) {
int ans = n;
for (int i = 2; i * i <= n; i++)
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}

二、欧拉定理、扩展欧拉定理 及其应用

1.欧拉定理

,则

在实际的算法竞赛应用中,欧拉定理的应用更为频繁。

证明

构造一个与 ,再进行操作。

为模 意义下的一个简化剩余系,则 也为模 意义下的一个简化剩余系。所以 ,可约去 ,即得

为素数时,由于 ,代入欧拉定理可立即得到费马小定理。

2.扩展欧拉定理

当然也有扩展欧拉定理

证明略,有兴趣请参照: synapse7

3.欧拉降幂

由广义欧拉定理可知:

第2、3个公式表述的即为广义欧拉降幂,不要求互质,但要求具有相应的大小关系。

我们不难发现,欧拉降幂的应用是十分模板化的,在这个降幂过程中的主要操作还是求欧拉函数的值。

​例题:​​​求,其中

#include <bits/stdc++.h>
#define
#define
using namespace std;
char a[1000006];
ll x, z;
ll quickpow(ll x, ll y, ll z){
ll ans = 1;
while (y){
if (y & 1) ans = ans * x % z;
x = x * x % z;
y >>= 1;
}
return ans;
}
ll phi(ll n){
ll i, rea = n;
for (i = 2; i * i <= n; i++){
if (n % i == 0){
rea = rea - rea / i;
while (n % i == 0) n /= i;
}
}
if (n > 1) rea = rea - rea / n;
return rea;
}
int main(){
while (scanf("%lld %s %lld", &x, a, &z) != EOF){
ll len = strlen(a);
ll p = phi(z);
ll ans = 0;
for (ll i = 0; i < len; i++) ans = (ans * 10 + a[i] - '0') % p;
ans += p;
printf("%lld\n", quickpow(x, ans, z));
}
return 0;
}

4.优化

可以使用线性筛优化。这部分内容单独开一篇博客。


标签:数论,ll,笔记,int,ans,rea,定理,欧拉
From: https://blog.51cto.com/u_12372287/5803563

相关文章

  • java8-笔记
    获取某个字段的值List<Integer>num=modelList.stream().map(model::getID).collect(Collectors.toList());根据某个字段去重再获取某个字段的值。List<CallBillModel......
  • FX3U+BCNET-FX实操笔记
                 ......
  • 关于华硕UX31E笔记本可识别U盘uefi启动却无法识别本地SSD盘uefi信息的解决办法
    问题描述:该笔记本bios明确有uefienable选项,证明一定是支持uefi启动的,而且只有单SSD盘也全盘格成了GPT模式,当ESP已经修复了引导信息,重启后还是reboot...提示,好似根本没有......
  • AQS相关笔记
    电脑修了快20填了,还没修好,我服了。。。也没有好记笔记和学习的地方,所以干脆在这里记笔记好了。AQSAQS具备特性:1.阻塞等待队列2.共享/独占3.公平/非公平4.可重入......
  • html-常用样式或脚本的学习笔记
    (一)CSS样式相关1.禁止拖动图片img{-webkit-user-drag:none;}2.去除select默认下拉图标.select{appearance:none;-webkit-appearance:none;......
  • docker学习笔记
    @目录前言1docker简介1.1是什么1.1.1为什么会有docker出现1.1.2docker理念1.2容器与虚拟机比较1.2.1容器发展简史1.2.2传统虚拟机技术1.2.3容器虚拟化技术1.2.4......
  • Java开发笔记之EasyExcel实现自定义合并策略
    0x00概述本文转载,原文原本是想学习使用Apache的POI的,但是无意中看到Alibaba的开源工具EastExcel,据说比POI更加快速高效,关键是使用起来也简单。官网地址为:https://aliba......
  • 【学习笔记】Mybatis配置优化
    Mybatis配置优化1.核心配置文件结构核心配置文件:mybatis-config.xml官方建议起这个名字,但我们可以随意起名configuration(配置)properties(属性)settings(设置)ty......
  • Basil: A Fast and Byzantine-Resilient Approach for Decentralized Training 阅读笔
    Basil:AFastandByzantine-ResilientApproachforDecentralizedTraining阅读笔记ProblemStatementDecentralizedSystemModel所有训练数据样本存储在分布式节......
  • STM32MP157 LINUX学习笔记01
    开发板IP:192.168.5.9配置命令ifconfigeth0192.168.5.9windowsIP:192.168.5.10ubuntuIP: 192.168.5.11首先确保三者互ping通过 通过这个博客学习如何配置ubuntu......