zoukankan      html  css  js  c++  java
  • 快速幂(应用:快速幂求逆元)

    快速幂

    (1)快速幂

    (a^k mod p)

    时间复杂度:O((log)k)

    https://www.luogu.com.cn/problem/P1226

    题意:求 (a^k mod p)

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    typedef long long LL;
    
    const char nl = '
    ';
    //const int N =
    
    LL qmi(int a, int k, int p){
        LL res = 1;
        while (k){
            if (k & 1) res = (LL)res * a % p;
            k >>= 1;
            a = (LL)a * a % p;
        }
        return res;
    }
    
    int main(){
        ios::sync_with_stdio(false);
    //    cin.tie(nullptr);
    
        int a, k, p;
        while (cin >> a >> k >> p){
            cout << a << '^' << k << " mod " << p << "=" << qmi(a, k, p) % p << nl; // 1^0 mod 1=0
        }
        return 0;
    }
    
    

    (2)快速幂求逆元

    若 a 和 p 互质,求逆元(b^{-1}),满足 (frac{a}{b} equiv a cdot b^{-1} pmod {p})

    两边同时乘以 b,得 (a equiv a cdot b cdot b^{-1} pmod {p})

    (ecause) a 和 p互质

    ( herefore) 两边同时约去 a,得 (b cdot b^{-1} equiv 1 pmod {p})

    由费马小定理 ({a}^{p-1} equiv 1pmod {p}),可得 (b^{-1})(b^{p-2} pmod {p})

    要求:p 一定是质数,b 不是 p 的倍数。

  • 相关阅读:
    对Promise的理解?
    对JavaScript垃圾回收机制的理解?
    说明split()与join()函数的区别?
    目标检测评估标准
    训练自己的数据集
    ssd_mobilenet_demo
    c++读取数据
    0XFF
    python读取数据
    快速排序
  • 原文地址:https://www.cnblogs.com/xiaoran991/p/14401380.html
Copyright © 2011-2022 走看看