当前位置:网站首页>【洛谷】P5091 【模板】扩展欧拉定理
【洛谷】P5091 【模板】扩展欧拉定理
2022-08-09 02:41:00 【记录算法题解】
题目地址:
https://www.luogu.com.cn/problem/P5091
题目描述:
给你三个正整数 a , m , b a,m,b a,m,b,你需要求: a b m o d m a^b \bmod m abmodm
输入格式:
一行三个整数, a , m , b a,m,b a,m,b
输出格式:
一个整数表示答案
注意输入格式, a , m , b a,m,b a,m,b 依次代表的是底数、模数和次数
数据范围:
对于 100 % 100\% 100%的数据, 1 ≤ a ≤ 1 0 9 1\le a \le 10^9 1≤a≤109, 1 ≤ b ≤ 1 0 20000000 , 1 ≤ m ≤ 1 0 8 1\le b \le 10^{20000000},1\le m \le 10^8 1≤b≤1020000000,1≤m≤108。
扩展欧拉定理是,如果 b > ϕ ( m ) b>\phi(m) b>ϕ(m),则有: a b ≡ a b m o d ϕ ( m ) + ϕ ( m ) ( m o d m ) a^b\equiv a^{b\bmod \phi(m)+\phi(m)}(\mod m) ab≡abmodϕ(m)+ϕ(m)(modm)若 b ≤ ϕ ( m ) b\le \phi(m) b≤ϕ(m),则可以直接用快速幂暴力求解。证明比较复杂,略。代码如下:
#include <iostream>
using namespace std;
long a, b, m;
long fast_pow() {
long res = 1;
while (b) {
if (b & 1) res = res * a % m;
b >>= 1L;
a = a * a % m;
}
return res;
}
int main() {
scanf("%ld%ld", &a, &m);
long phi = m, tmp = m;
for (int i = 2; i <= tmp / i; i++) {
if (tmp % i == 0) {
phi = phi / i * (i - 1);
while (tmp % i == 0) tmp /= i;
}
}
if (tmp > 1) phi = phi / tmp * (tmp - 1);
char ch;
bool flag = false;
while (!isdigit(ch = getchar()));
for (; isdigit(ch); ch = getchar()) {
b = b * 10 + ch - '0';
if (b > phi) {
flag = true;
b %= phi;
}
}
if (flag) b += phi;
printf("%ld\n", fast_pow());
}
时间复杂度 O ( m + log b ) O(\sqrt m+\log b) O(m+logb),空间 O ( 1 ) O(1) O(1)。
边栏推荐
猜你喜欢
Maya engine modeling
online schema change and create index
ROS2错误:不支持OpenGL 1.5 GLRenderSystem:: ci initialiseContext在C: \ \ ws \构建……
Working subtotal rtcp length and network byte order
Likou Brush Question Record 4.1-----209. The sub-array with the smallest length
中国SSD产业突围有多难?除了技术“瓶颈”还有哪里挑战?
OJ:L3-021 神坛 伪解 排序后遍历
【电商运营】不知道怎么做网站优化?这里有你需要知道的一切!
如何最大限度地减少企业受到供应链攻击的风险
Inheritance
随机推荐
工具类:base64格式的数据与本地文件的相互转换
ROS2错误:不支持OpenGL 1.5 GLRenderSystem:: ci initialiseContext在C: \ \ ws \构建……
HMS Core分析服务智能运营6.5.1版本上线
快速乘写法
1160. 拼写单词
最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享
搭建Eureka注册中心集群 ,实现负载均衡
【Jenkins 学习笔记】玩转持续集成与持续交付
313. 超级丑数-暴力解法
【Untitled】
物联网未来:未来五年的预期
“蔚来杯“2022牛客暑期多校训练营7,签到题CFGJ
C#计算SHA1加密和base64编码
通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。
jmeter的websocket插件安装和使用方法
SA-SSD环境搭建——血与泪的教训
Json之JArray的使用方法
How to play knowledge graph in recommender system
Yii2开启 Schema 缓存
uart_spi练习