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

扩展欧拉定理以及练习题

文章目录

  • 扩展欧拉定理
    • 定理
      • 定理内容
      • 证明
    • 习题
      • 模板题luogu5091
      • 练习题

扩展欧拉定理

定理

定理内容

ab≡{abmodφ(m)如果 gcd⁡(a,m)=1,ab如果 gcd⁡(a,m)≠1且 b<φ(m),abmodφ(m)+φ(m)如果 gcd⁡(a,m)≠1且 b≥φ(m).(modm)a^b \equiv \begin{cases} a^{b \bmod \varphi(m)} & \text{如果 } \gcd(a, m) = 1, \\ a^b & \text{如果 } \gcd(a, m) \neq 1 \text{ 且 } b < \varphi(m), \\ a^{b \bmod \varphi(m) + \varphi(m)} & \text{如果 } \gcd(a, m) \neq 1 \text{ 且 } b \geq \varphi(m). \end{cases} \pmod{m} ababmodφ(m)ababmodφ(m)+φ(m)如果 gcd(a,m)=1,如果 gcd(a,m)=1  b<φ(m),如果 gcd(a,m)=1  bφ(m).(modm)

其中 φ\varphiφ 为欧拉函数。

例子
计算 71000mod107^{1000} \bmod 1071000mod10

  1. φ(10)=4\varphi(10) = 4φ(10)=4(因为与 10 互质的数为 1, 3, 7, 9)。
  2. gcd⁡(7,10)=1\gcd(7, 10) = 1gcd(7,10)=1,所以直接应用欧拉定理:
    71000=74×250=70≡1(mod10).7^{1000} = 7^{4 \times 250} = 7^0 \equiv 1 \pmod{10}. 71000=74×250=701(mod10).

证明

这里偷懒,贴了deepseek的证明:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

习题

模板题luogu5091

link

不过注意到 bbb 的值域达到了 102×10710^{2\times 10^7}102×107,所以需要读入的时候就可以进行取模了,这样子这题就做完了。

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
#define fr(i,a,b,k) for(int i=a;i!=b;i+=k)// a<b a>b
using namespace std;
const int N=1e6+1;
int t,n,m,mod,a,b;
inline int qmi(int x,int y)
{int res=1;while(y>0){if(y&1)res*=x,res%=mod;x*=x,x%=mod,y>>=1;}return res;
}
inline int read()
{int x=0;bool f=0;char c=getchar();while(c>'9'||c<'0')c=getchar();while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar(),f|=(x>=m),x%=m;return x+f*m;
}
int phi(int x)
{int ans=x,y=sqrt(x);fr(i,2,y+1,1){if(x%i==0)ans=ans/i*(i-1);while(x%i==0)x/=i;}if(x>1)ans=ans/x*(x-1);return ans;
}
signed main()
{//IOS;cin>>a>>mod;m=phi(mod);b=read();cout<<qmi(a,b);return 0;
}

代码是很久以前写的,码风烂,勿喷。

还有一些注意的点:

求单个欧拉函数的时间复杂度是 n\sqrt nn,但是如果求多个的话,可以线性筛 O(V)O(V)O(V) 解决。

其次你可能会疑惑,这代码里也没有判断 gcd⁡(a,m)\gcd(a,m)gcd(a,m) 是否为 111 啊。

其实是简化了的,根据欧拉定理:
a,m∈Za, m \in \mathbb{Z}a,mZ ,且 gcd⁡(a,m)=1\operatorname{gcd}(a, m)=1gcd(a,m)=1 时有: aφ(m)≡1(modm)a^{\varphi(m)} \equiv 1(\bmod m)aφ(m)1(modm)

此时 abmodφ(m)+φ(m)=abmodφ(m)a^{b\bmod \varphi(m)+\varphi(m)}=a^{b\bmod\varphi(m)}abmodφ(m)+φ(m)=abmodφ(m)

所以写代码时一般认为扩展欧拉定理长这样:

a,m∈Za, m \in \mathbb{Z}a,mZ 时有:
ab≡{ab,b<φ(m)abmodφ(m)+φ(m),b≥φ(m)(modm)a^b \equiv\left\{\begin{array}{cl} a^b & , b<\varphi(m) \\ a^{b \bmod \varphi(m)+\varphi(m)} & , b \geq \varphi(m) \end{array}(\bmod m)\right. ab{ababmodφ(m)+φ(m),b<φ(m),bφ(m)(modm)

练习题

这里放几道题,由于作者现在还没有做出来这些题,所以先放着,以后会出相应的题解。

  • 洛谷P4139 lnik
  • CF906D 洛谷 CF
  • CF615D 洛谷 CF
  • CF17D 洛谷 CF
http://www.dtcms.com/a/315687.html

相关文章:

  • 嵌入式 - 数据结构:循环链表和内核链表
  • 【Unity笔记】Unity TextMeshPro 字体显示为方块的终极解决方案(含中文、特殊字符支持)
  • 如何查看PCI卡的VID,DID,SVID,SSID编号
  • Google AI 发布 MLE-STAR:一款能够自动执行各种 AI 任务的先进机器学习工程代理
  • cf.训练
  • Prometheus 监控平台部署 (云原生环境)
  • Docker Compose管理新范式:可视化控制台结合cpolar提升容器编排效率?
  • 从零开始学网页开发:HTML、CSS和JavaScript的基础知识
  • C++ 多线程(三)
  • 嵌入式学习的第四十三天-ds18b20 数字温度传感器
  • 如何在nuxtjs项目中使用vuex?
  • duxapp中主题系统是如何实现动态切换的
  • Redis 基础(一)
  • 数字图像处理(冈萨雷斯)第三版:第四章——频率域滤波(学前了解知识)——主要内容和重点
  • 【运维基础】Linux 系统启动原理
  • 增量:增量处理
  • 游戏行业DDoS攻防实战指南
  • ApplicationContext的实现类有哪些?
  • 「PromptPilot 大模型智能提示词平台」—— PromptPilot × 豆包大模型 1.6:客户投诉邮件高效回复智能提示词解决方案
  • 芯祥科技:工业/车规级BMS芯片厂商 规格选型对比
  • Python import 详解
  • linux_https,udp,tcp协议(更新中)
  • C++ ---》string类的模拟实现
  • CRT调试堆检测:从原理到实战的资源泄漏排查指南
  • HBM Basic(VCU128)
  • nflsoi 7.29 题解
  • Python-深度学习--2信息熵,条件熵(ID3决策树),KL散度
  • 飞算JavaAI—AI编程助手 | 引领开发新时代,智能化编程的完美助手
  • python学智能算法(三十三)|SVM-构建软边界拉格朗日方程
  • 分布式微服务--Nacos持久化