题意

题目描述

给你三个正整数,$a,m,b$,你需要求:

$a^b \mod m$

输入输出格式

输入格式:

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

输出格式:

一个整数表示答案

输入输出样例

输入样例#1:
复制

2 7 4
输出样例#1:
复制

2
输入样例#2:
复制

998244353 12345 98765472103312450233333333333
输出样例#2:
复制

5333

说明

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

样例1解释:

$2^4 \mod 7 = 2$

输出2

数据范围:

对于全部数据:

$1≤a≤10^9$

$1≤b≤10^{20000000}$

$1≤m≤10^6$

分析

费马小定理

当 \(a,p\in \mathbb{Z}\) 且 \(p\) 为质数,且 \(a\not\equiv 0\pmod{p}\) 时有:

\(a^{p-1}\equiv 1\pmod{p}\) 。

所以 \(a^b\equiv a^{b\bmod (p-1)}\pmod p\) 。

欧拉定理

当 \(a,m\in \mathbb{Z}\) ,且 \(\gcd(a,m)=1\) 时有:

\(a^{\varphi(m)}\equiv 1\pmod{m}\) 。

这里 \(\varphi(x)\) 是数论中的欧拉函数。

所以 \(a^b\equiv a^{b\bmod \varphi(m)}\pmod m\) 。

扩展欧拉定理

当 \(a,m\in \mathbb{Z}\) 时有:

\(a^b\equiv\left\{\begin{matrix}a^b&,b<\varphi(m)\\a^{b\bmod\varphi(m)+\varphi(m)}&,b\ge\varphi(m)\end{matrix}\right.\pmod m\) 。

对于那个高精度整数,一边乘10相加,一遍取模即可。时间复杂度\(O(\sqrt m+\lg b+\log_2 m)\)

代码

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll; int main(){
int a=read<int>(),m=read<int>(); int phi=m,mm=m;
for(int i=2;i*i<=mm;++i)if(mm%i==0){
phi=phi/i*(i-1);
while(mm%i==0) mm/=i;
}
if(mm>1) phi=phi/mm*(mm-1); int b=0,flag=0;
char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)){
b=b*10+ch-'0',ch=getchar();
if(b>=phi) b%=phi,flag=1;
}
if(b>=phi) b%=phi,flag=1;
if(flag) b+=phi; int ans=1;
for(;b;b>>=1,a=(ll)a*a%m)
if(b&1) ans=(ll)ans*a%m;
printf("%d\n",ans);
return 0;
}

LG5901 【模板】欧拉定理的更多相关文章

  1. P5091 【模板】欧拉定理(欧拉降幂)

    P5091 [模板]欧拉定理 以上3张图是从这篇 博客 里盗的,讲的比较清楚. #include<bits/stdc++.h> using namespace std; typedef l ...

  2. P5091 【模板】欧拉定理

    思路 欧拉定理 当a与m互质时 \[ a^ {\phi (m)} \equiv 1 \ \ (mod\ m) \] 扩展欧拉定理 当a与m不互质且\(b\ge \phi(m)\)时, \[ a^b \ ...

  3. 题解 P5091 【【模板】欧拉定理】

    欧拉定理:若 \(gcd(a,n)=1\),\(a^{\varphi(n)}\equiv 1(mod\ n)\) 设 \(1\sim n-1\) 中与 \(n\) 互素的 \(\varphi(n)\) ...

  4. [洛谷P5091]【模板】欧拉定理

    题目大意:求$a^b\bmod m(a\leqslant10^9,m\leqslant10^6,b\leqslant10^{2\times10^7})$ 题解:扩展欧拉定理:$$a^b\equiv\b ...

  5. 【luoguP5091】【模板】欧拉定理

    题目链接 欧拉定理: 当\(a\),\(m\)互质时,\(a^{\phi(m)}\equiv 1 (mod ~ m)\) 扩展欧拉定理: 当\(B>\phi(m)\)时,\(a^B\equiv ...

  6. 洛谷 P3811 【模板】乘法逆元(欧拉定理&&线性求逆元)

    题目传送门 逆元定义 逆元和我们平时所说的倒数是有一定的区别的,我们平时所说的倒数是指:a*(1/a) = 1,那么逆元和倒数之间的区别就是:假设x是a的逆元,那么 a * x = 1(mod p), ...

  7. P5091 【模板】扩展欧拉定理

    题目链接 昨天考试考到了欧拉公式,结果发现自己不会,就来恶补一下. 欧拉公式 \(a^b \bmod p = a^{b}\) \(b < \varphi(p)\) \(a^b \bmod p = ...

  8. uestc_retarded 模板

    虽然这个队,以后再也没有了,但是他的模板,是永垂不朽的![误 #include <ext/pb_ds/priority_queue.hpp> __gnu_pbds::priority_qu ...

  9. Description has only two Sentences(欧拉定理 +快速幂+分解质因数)

    Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...

随机推荐

  1. css选择器思维导图

  2. org.apache.httpcomponents httpclient 发起HTTP JSON请求

    1. pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...

  3. Codeforces Round #506 (Div. 3) D. Concatenated Multiples

    D. Concatenated Multiples You are given an array aa, consisting of nn positive integers. Let's call ...

  4. navicat premium 连接出现的问题

    1.listener does not currently know of service requested in connect descriptor 2.问题截图: 3.问题原因:服务名或者SI ...

  5. 关于“用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题

    vc++2010中,要使用ado操作数据库,所以在stdafx.h中引入了ado的dll库,引入代码如下: #import "C:/Program Files/Common Files/Sy ...

  6. 64-65管道,rm与rmdir

    听说linux根目录tmp文件夹内是临时文件.用久了会产生很多垃圾文件 请问下面的临时文件怎么维护清理?全部没用删除,还是? /tmp 公用的临时文件存储点 linux下的文件结构 /bin 二进制可 ...

  7. 你知道怎么用Idea抽取方法、创建class吗?

    liJ IDEA的快捷键是进行重构的利器,坊间盛传,完全使用IDEA快捷键重构的代码,是不需要写测试用例保护的 本文就分享一个使用IDEA抽取方法及创建新的class的方法 工具/原料   Intel ...

  8. Englis(二)

    turn a year older  年长一岁 the birthday person 过生日的人 in honor of 为庆祝,为纪念 to observe/celebrate birthday  ...

  9. vue--http请求的封装--session

    export function Fecth (url, data, file, _method) { if (file) { // 需要上传文件 return new Promise((resolve ...

  10. php-xdebug(安装)

    我虽然是前端人员,但是我也挺喜欢服务端语言的,我不是说完全不会服务端语言,主要是没有实践经验,实践经验不一样非要公司的项目,自己也可以去模仿一些项目,那也是实践的.所以就有了想法,自己写个项目,从后端 ...