博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧拉定理与扩展欧拉定理学习笔记
阅读量:6396 次
发布时间:2019-06-23

本文共 1239 字,大约阅读时间需要 4 分钟。

关于欧拉函数及其求法的复习。

这里是。

一句话总结:

\(a^b​\) \(mod​\) \(m​\) \(≡​\) \(a^b​\) \((b < phi(m))​\)

\(a^b\) \(mod\) \(m\) \(≡\) \(a^{b \% phi(m)+phi(m)}\) \((b >= phi(m))\)

实际上不需要记欧拉定理,后面这个在应用上已经可以涵盖前面的了。

用于优化指数非常大的情况。

#include 
using namespace std;#define LL long longconst int N = 1000010;int tot, divv[N];int a, b, m;int fpow (int a, int b, int m) { int res = 1; while (b) { if (b & 1) { res = 1LL * res * a % m; } a = 1LL * a * a % m; b >>= 1; } return res;}int main () { cin >> a >> m; int mx = sqrt (m), tmp = m; for (int i = 2; i <= mx; ++i) { if (tmp % i == 0) { divv[++tot] = i; while (tmp % i == 0) tmp /= i; } } if (tmp != 1) divv[++tot] = tmp; int _phi = m; for (int i = 1; i <= tot; ++i) { _phi = _phi / divv[i] * (divv[i] - 1); } int b = 0, ch = getchar (), type = 1; while ('9' < ch || ch < '0') ch = getchar (); while ('0' <= ch && ch <= '9') { b = b * 10 + ch - '0'; if (b >= _phi) { type = 2; b = b % _phi; } ch = getchar (); } if (type == 2) b = b % _phi + _phi; cout << fpow (a, b, m);}

转载于:https://www.cnblogs.com/maomao9173/p/10490683.html

你可能感兴趣的文章
ARM QT实现多点触摸【转】
查看>>
Weblogic项目部署教程
查看>>
Gradle -- buildScript块与allprojects块及根级别的repositories区别
查看>>
远程SSH连接服务与基本排错
查看>>
Objective-C学习笔记(十九)——对象方法和类方法的相互调用
查看>>
win10 WmiPrvSE.exe WMI Provider 占用CPU过高的问题
查看>>
hdu 4945 2048(DP)
查看>>
论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
查看>>
开篇有益-解析微软微服务架构eShopOnContainers(一)
查看>>
IE新发现
查看>>
quick check
查看>>
Debug时含有的子元素,在代码里获取不到的问题
查看>>
UVA 11020 - Efficient Solutions(set)
查看>>
RStudio版本号管理 整合Git
查看>>
使用 PHPMailer 发送邮件
查看>>
文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解
查看>>
CSS选择器学习小结
查看>>
什么叫贸工技发展模式?什么叫技工贸发展模式?
查看>>
MyEclipse for Spring 10.0: GWT 2.1 and Spring Scaffolding
查看>>
水木-搜索引擎技术版
查看>>