• 数论基础


    考试发现逆元不会,所以决定还是学一下数论把

    先来搞清几个概念(from:hzwer)

    同除和同余

    假设 (m)(n) 是整数,且 (m) 不是 (0),则 m 整除 (n) 指的是 (n)(m) 的倍
    数,即存在整数 (k),使得 (n = mk)

    • 记为 (m | n)
    • 称 (m)(n) 的一个约数

    同余并记

    如果 (m) 整除 (a - b),我们就说 (a)(b)(m) 同余并记
    (a ≡ b (mod m))

    素数

    如果一个数 (x),没有 (1)(x) 以外的数是 (x) 的约数,称 (x) 是素数(质
    数)

    • 比如 2,3,5,7,11 …

    eg:

    证明素数有无穷多个?

    假设素数是有限的,假设素数只有有限的n个,最⼤的⼀个素
    数是(p)

    (q)为所有素数之积加上(1),那么,(q =(2×3×5×…×p) + 1)
    能被所有素数整除,我们找到了一个更大的素数

    素数唯一分解

    若整数 (N ≥ 2),那么 (N) 一定可以唯一地表示为若干个素数的乘积。
    形如
    (N) (=) (p_1^{r_1}*p_2^{r_2}*…p_k^{r_k}) ((p_i) 为素数 , (r_i) ≥ 0)

    最大公约数

    • 两个不同时为 (0) 的数 (a)(b) 的最大公因数是同时整除它们的两个最大
    的数,记为 (gcd( a , b ))
    • 如果 (gcd( a , b ) = 1),我们称它们互质。
    • 比如 (gcd( 16 , 24 ) = 8)

    快速幂 ab

    • 预处理 (a_1~a_2~a_4~…~a_2n),对 (b) 做二进制拆分
    • 如 (a^{21} = a^{16} * a^{4} * a^{1})

    逆元(倒数

    逆元的引入是为了解决在同余意义下,无法进行除法的问题 !
    也就是解决 (a / b % m) 情况

    在模 (p) 意义下,(x) 的乘法逆元 (x^{p-1}) 满足如下同余方程:
    (x * x^{-1} ≡ 1 (mod p))

    eg:

    (15 / 3 = 5 (mod 7) => (15 mod 7) * (3^{-1}) mod 7)

    求逆元??

    我们有:

    (inv(x)⋅x ≡ 1 (mod p))

    又据费马小定理:(x^{p-1} ≡ 1 (mod p))

    故有:(inv(x)⋅x ≡ x^{p-1}(mod p))

    两边同时除以 (x) 有:

    (inv(x) ≡ x^{p-2}(mod p))

    这就是模质数意义下的逆元求法

    代码实现

    int qmi(int a,int k,int p)
    {
        int res=1%p;
        while(k)
        {
            if(k & 1)res=(ll)res*a%p;
            a=(ll)a*a%p;
            k>>=1;
        }
        return res;
    
    }
    
  • 相关阅读:
    解压缩编码列表
    按既定顺序创建目标数组
    整数的各位积和之差
    好数对的数目
    拿硬币
    设计 Goal 解析器
    【求助】win 2008 R2 远程桌面多用户,破解最大连接数2的限制
    Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次
    Java abstract class 和 interface 的区别
    忘记BIOS超级管理员密码,怎么破解?
  • 原文地址:https://www.cnblogs.com/Arielzz/p/14038860.html
Copyright © 2020-2023  润新知