美文网首页
快速幂取余

快速幂取余

作者: M_lear | 来源:发表于2018-12-02 21:19 被阅读0次

本文分成以下四个部分,全部都跟取余有关

  1. 引理证明
  2. 介绍快速幂取余
  3. 了解数论中的欧拉定理
  4. 模幂运算
    如果你只想看快速幂取余的部分,可以直接看第二部分。

目标一:证明积的取余等于取余的积的取余

数学描述为:
(a\cdot b)\%p=((a\%p)\cdot(b\%p))\%p
为了简化书写,介绍同余的概念:

a\%p=b\%p,则称a,b同余,记作a\equiv b(\mod p)a\equiv b(\%p)

同余的基本性质:

  1. (a-b)\%p=0,即 p\mid(a-b),即p能整除a-b\Leftrightarrow a\equiv b(\mod p)
  2. 对称性:a\equiv b(\mod p)\Leftrightarrow b\equiv a(\mod p)
  3. 传递性:若a\equiv b(\mod p)且b\equiv c(\mod p),则a\equiv c(\mod p)

定理:若a\equiv b(\mod p)且c\equiv d(\mod p),则

  • a+c\equiv b+d(\mod p)
  • a-c\equiv b-d(\mod p)
  • a\cdot c\equiv b\cdot d(\mod p)
  • a/c\equiv b/d(\mod p)

只证a\cdot c\equiv b\cdot d(\mod p)供参考,其余类似证得。

证明:
因为c\equiv d(\mod p)
由性质1得(c-d)\%p=0
也有[a\cdot (c-d)]\%p=0
(a\cdot c-a\cdot d)\%p=0
所以a\cdot c\equiv a\cdot d(\mod p)
同理可得a\cdot d\equiv b\cdot d(\mod p)
最后由传递性得a\cdot c\equiv b\cdot d(\mod p)

显然a\equiv a\%p(\mod p)和b\equiv b\%p(\mod p)
故由上面得定理可得:(a\cdot b)\%p=((a\%p)\cdot(b\%p))\%p,故得证。

目标二:理解快速幂取余

快速幂取余又叫蒙哥马利算法。
这部分内容主要借鉴于一篇我认为是最好的讲解快速幂取余原理的博客
目标:快速求出a^{b}\%c,其中b可以是一个很大的数。

图一
图二
图三
代码如下:
int quick_mod(int a,int b,int c) {
   int A = 1; // 结果的保存,就是 An,初始化一下
   int T = a % c; //首先计算 T0 的值,用于 Tn 的递推
   while(b != 0){
       if(b&1){
           A = (A * T) % c;
       }
       b >>= 1;
       T = (T * T) % c; // 更新 T,如果下一位是 1 就可以用这个算 A
   }
   return A;
}

目标三:了解数论中的欧拉定理

欧拉函数:\varphi(n)表示小于n的正整数中与n互质的数的个数。
欧拉定理:若n,a为正整数,且n,a互素,即gcd(a,n) = 1,则a^{\varphi(n)}\equiv1(\mod n)

目标四:模幂运算

图四

相关文章

  • 快速幂取余

    本文分成以下四个部分,全部都跟取余有关: 引理证明 介绍快速幂取余 了解数论中的欧拉定理 模幂运算如果你只想看快速...

  • (矩阵)快速幂||取余运算

    今天看了一下cgy杯,里面涉及的算法很多,其中有一个就是在蓝桥杯,校赛等多次比赛中坑了我的矩阵快速幂,然而我现在还...

  • 常用算法

    快速幂 Fast Power 快速取模 FastMode 快速排序 FastSort

  • 几个数论小算法

    快速幂 个人感觉用的不多 快速幂取模 有时候幂运算所得到结果过大,导致溢出。而我们只想得到最后取模的结果。原理 ...

  • 资格赛 A题

    画图说话: 分析:9937 为质数,费马小定理+逆元,除法变乘法,快速幂取余 费马小定理 公式推导:(b/a)mo...

  • 快速幂模板(luogu P1226 【模板】快速幂||取余运算)

    题目描述输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。 输入输出格式输入格式:三个整...

  • 模板 (整数 & 矩阵快速幂) | 洛谷 P1226 & P33

    P1226 【模板】快速幂||取余运算 输入输出样例输入样例#1:2 10 9输出样例#1:2^10 mod 9=...

  • 3-Python的操作符

    一、算术操作符 +(加) -(减) *(乘) /(除) %(取余,求余数) **(幂运算) //(取整除) 其他...

  • 【函数学习】Python运算符

    ** 幂运算 // 相除向下取整 % 取余 != 不相等 (老版本为<>,Python3中已经废弃) %=; //...

  • IDL运算符汇总及代码示例

    1 数学运算符 1.1增运算和减运算(++、- -) 1.2幂运算(^) 1.3取余运算(mod) 1.4取大和取...

网友评论

      本文标题:快速幂取余

      本文链接:https://www.haomeiwen.com/subject/owlscqtx.html