题意

题目描述

给你三个正整数,$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. wpf自定义控件中使用自定义事件

    wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  2. 每天CSS学习之border-radius

    css3的border-radius属性,我们用之来画圆角边框. 1.border-radius:none;//表示不用圆角边框,边框会变成方形. 2.border-radius:水平方向{1,4}[ ...

  3. matla互相关协方差的计算和理解

    计算相关函数和协方差的MATLAB函数 MATLAB信号处理工具箱提供了计算随机信号相关函数xcorr. 函数xcorr用于计算随机序列自相关和互相关函数.调用格式为: [c,lags]=xcorr( ...

  4. codeforce150A(简单的求质数问题)

    A. Win or Freeze time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  5. 中文datepicker控件

    $(function() { $.datepicker.regional[, isRTL: !, showMonthAfterYear: !, yearSuffix: "年" } ...

  6. prinft he sprintf

    四.printf函数 printf函数返回一个格式化后的字符串. 语法:printf(format,arg1,arg2,arg++) 参数 format 是转换的格式,以百分比符号 (“%”) 开始到 ...

  7. java学习笔记15(String 类,StringBuffer)

    /* * String类的特点: * 所有的""都是String的对象 * 字符串一旦创建就是常量,不能改变 */ public class StringDemo { public ...

  8. 实现在当前的日期上加N天

    function getNewDay(dateTemp, days) { var dateTemp = dateTemp.split("-"); var nDate = new D ...

  9. 使用Eclipse自带的Axis1插件生成Web Service服务端客户端

    JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...

  10. phpstorm使用zen coding 快速编辑补全html/css代码

    百科定义: 使用仿CSS选择器的语法来快速开发HTML和CSS ——由Sergey Chikuyonok开发. Zen Coding由两个核心组件组成:一个缩写扩展器(缩写为像CSS一样的选择器)和上 ...