• 数论基础


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

    先来搞清几个概念(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;
    
    }
    
  • 相关阅读:
    通达OA 新旧两种数据库连接方式
    c++ 如何获取系统时间
    性能测试开源小工具——http_load介绍
    http_load安装与测试参数分析
    不错的C++框架: Thrift(2)-传输和网络相关
    管理处理器的亲和性(affinity)
    300元内,此耳机是首选。不亏千人好评,对的起你的耳朵。
    [品质生活] 舒适 Schick HYDRO 5剃须刀
    巴氏刷牙法_百度百科
    Amazon.com : The Odyssey of the Manual Toothbrusher
  • 原文地址:https://www.cnblogs.com/Arielzz/p/14038860.html
Copyright © 2020-2023  润新知