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

P5091 【模板】扩展欧拉定理

题目描述

给你三个正整数,a,m,ba,m,ba,m,b,你需要求:ab mod ma^b \bmod mabmodm

输入格式

一行三个整数,a,m,ba,m,ba,m,b

输出格式

一个整数表示答案

输入输出样例 #1

输入 #1

2 7 4

输出 #1

2

输入输出样例 #2

输入 #2

998244353 12345 98765472103312450233333333333

输出 #2

5333

说明/提示

注意输入格式,a,m,ba,m,ba,m,b 依次代表的是底数、模数和次数

【样例 111 解释】
24 mod 7=22^4 \bmod 7 = 224mod7=2

【数据范围】
对于 100%100\%100% 的数据,1≤a≤1091\le a \le 10^91a1091≤b≤1020000000,1≤m≤1081\le b \le 10^{20000000},1\le m \le 10^81b10200000001m108

1. 剩余类、完全剩余系、简化剩余系

  • 剩余类:模 mmm 的两个整数若差为 mmm 的倍数,则它们属于同一个剩余类。
    即:若 a≡b(modm)a \equiv b \pmod mab(modm),则 aaabbb 属于同一个剩余类。
  • 完全剩余系:模 mmmmmm 个两两不全同余的整数集合。
    例如:0,1,2,…,m−1{0, 1, 2, \dots, m-1}0,1,2,,m1 是模 mmm 的一个完全剩余系。
  • 简化剩余系:模 mmm 下与 mmm 互质的数所组成的集合。其元素个数为 φ(m)\varphi(m)φ(m)

2. 费马小定理(Fermat’s Little Theorem)

ppp 为质数,且 gcd⁡(a,p)=1\gcd(a, p) = 1gcd(a,p)=1,则
ap−1≡1(modp) a^{p-1} \equiv 1 \pmod p ap11(modp)

解释
当模数是质数 ppp 时,任意与 ppp 互质的整数 aaa(p−1)(p-1)(p1) 次方对 ppp 取模等于 111
这是欧拉定理的特殊情形(当 m=pm=pm=p 时)。

3. 欧拉定理(Euler’s Theorem)

gcd⁡(a,m)=1\gcd(a, m) = 1gcd(a,m)=1,则
aφ(m)≡1(modm) a^{\varphi(m)} \equiv 1 \pmod m aφ(m)1(modm)

解释
这是费马小定理的推广。它说明当 aaammm 互质时,aaaφ(m)\varphi(m)φ(m) 次方在模 mmm 意义下同余于 1。
其中 φ(m)\varphi(m)φ(m) 表示欧拉函数,即 1~m 中与 m 互质的数的个数。

4. 扩展欧拉定理

ab≡{ab,b<φ(m), ab mod φ(m)+φ(m),b≥φ(m),( mod m) a^b \equiv \begin{cases} a^b, & b < \varphi(m), \ a^{b \bmod \varphi(m) + \varphi(m)}, & b \ge \varphi(m), \end{cases} \quad (\bmod m) ab{ab,b<φ(m), abmodφ(m)+φ(m),bφ(m),(modm)

解释
当指数 bbb 很大时,可以利用欧拉函数进行降幂计算:

  • b<φ(m)b < \varphi(m)b<φ(m),直接计算 ab mod ma^b \bmod mabmodm
  • b≥φ(m)b \ge \varphi(m)bφ(m),则先将指数对 φ(m)\varphi(m)φ(m) 取模,再加上 φ(m)\varphi(m)φ(m),即可得到等价的指数。
    这在 快速幂取模循环节优化 中十分常用。

定理

对于任意整数 aaannnb≥ϕ(n)b \geq \phi(n)bϕ(n),其中 ϕ(n)\phi(n)ϕ(n) 是欧拉函数,满足:
ab≡abmod  ϕ(n)+ϕ(n)(modn) a^b \equiv a^{b \mod \phi(n) + \phi(n)} \pmod{n} ababmodϕ(n)+ϕ(n)(modn)

适用条件

  • aaannn 互质时,退化为欧拉定理:aϕ(n)≡1(modn)a^{\phi(n)} \equiv 1 \pmod{n}aϕ(n)1(modn)
  • aaannn 不互质时,需满足 b≥ϕ(n)b \geq \phi(n)bϕ(n) 才能直接应用。

示例

问题:计算 2100mod  122^{100} \mod 122100mod12
步骤

  1. 计算 ϕ(12)=ϕ(4)ϕ(3)=2×2=4\phi(12) = \phi(4)\phi(3) = 2 \times 2 = 4ϕ(12)=ϕ(4)ϕ(3)=2×2=4
  2. b=100≥ϕ(12)b = 100 \geq \phi(12)b=100ϕ(12),应用扩展欧拉定理:
    2100≡2100mod  4+4≡20+4≡16≡4(mod12) 2^{100} \equiv 2^{100 \mod 4 + 4} \equiv 2^{0+4} \equiv 16 \equiv 4 \pmod{12} 21002100mod4+420+4164(mod12)

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
string s;
ll a,m;
ll get_phi(ll m)
{int res = m;for(int i=2;i*i<=m;i++){if(m%i==0){res =res/i*(i-1);while(m%i==0)m/=i;}}if(m>1)res = res/m*(m-1);return res;
}ll depow(ll phi_m)
{ll b = 0;bool flag = false;ll sz = s.size();for(int i=0;i<sz;i++){b = b*10+s[i]-'0';if(b>=phi_m){flag=true;b%=phi_m;}}if(flag)b+=phi_m;return b;
}
ll qpow(ll a,ll b,ll p)
{ll res =1;for(;b;b>>=1){if(b&1)res = res*a%p;a = a*a%p;}return res;
}void solve()
{cin>>a>>m>>s;ll phi_m = get_phi(m);ll res = depow(phi_m);ll res2 = qpow(a,res,m)%m;cout<<res2<<endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t=1;// cin>>t;while(t--){solve();}return 0;
}
http://www.dtcms.com/a/565797.html

相关文章:

  • C盘爆满急救指南
  • 天台高端网站建设公司专业网站设计公司价格
  • 温州专业微网站制作公司天猫网页版
  • 免费网络推广网站王烨重生
  • 微气象仪:精准感知微环境气象变化
  • svn使用之创建分支进行开发
  • 拍卖网站建设公司社交类电商平台
  • Elasticsearch 8 安装与配置
  • 邯郸做网站推广找谁盛大游戏优化大师
  • HR1124S/HR1154D:赋能直流电机高效安全运行的核心芯片
  • 化妆品网站网页设计营销培训师
  • 网站积分解决方案标书制作模板
  • 前端直接渲染Markdown
  • Vue 3.5 新特性——useTemplateRef:简化模板引用的革命!
  • 网站开发技术三大件网页设计与制作教程期末考试试题
  • 赣州制作网站企业个人简历自我评价
  • 寄存器与存储器的区别(TLB和Cache,指令流水线分析)
  • 思维链(CoT)× 智能体(Agent)× 提示词(Prompt)讲解
  • MAC-SQL 图1
  • 第一章 WPF概述
  • 建设网站主机免费版展厅设计与施工公司
  • 如何注册网站免费的吗wordpress注释符号
  • 博客网站快速排名常用的设计软件有哪些
  • 做直播导航网站有哪些网站后端开发语言
  • C# 常用集合的使用
  • 合肥市建设网官方网站公司微网站怎么做的
  • 网站服务器的费用如何在网站后台删除栏目
  • 3.4 Lua代码中的文件操作
  • 高盛西湖智谷引进高科技企业 聚集产业高质量发展
  • 行业网站建设公司自己怎么做一个企业官网