算法之数论

本文介绍了快速幂算法,一种通过迭代降低时间复杂度至O(logb)的求幂方法,以及模运算的基本概念,包括取模、最大公约数和最小公倍数,以及在模运算中的基本规则和逆元概念。同时提到了小费马定理在除法求模问题中的应用。
摘要由CSDN通过智能技术生成

数论


1.快速幂算法

原理

​ 计算a的b次幂,我们首先会想到的是用一个循环,每次乘以一个a,乘b次,这种情况下所需的时间复杂度为O(b)。而快速幂算法则是利用倍增思想进行迭代求解,可以将时间复杂度降低到O(logb)。

分为两种情况:

  • 当b为偶数时:
    a b = a b 2 × a b 2 = ( a 2 ) b 2 a^b=a^{\frac{b}{2}}\times a^{\frac{b}{2}}=({a^2})^{\frac{b}{2}} ab=a2b×a2b=(a2)2b

  • 当b为奇数时:

a b = a × a b 2 × a b 2 = a × ( a 2 ) b 2 (这里的 b 2 向下取整) a^b=a\times a^{\frac{b}{2}}\times a^{\frac{b}{2}}=a\times ({a^2})^{\frac{b}{2}}(这里的\frac{b}{2}向下取整) ab=a×a2b×a2b=a×(a2)2b(这里的2b向下取整)

代码实现
public static long qmi(long a, long b, long mod) {
        long res = 1;
        while (b > 0) {
            //判断b是否为奇数
            if ((b & 1) == 1) {
                res = res * a % mod;
            }
            a = a * a % mod;
            b >>= 1;// b/=2
        }
        return res;
    }

2.模运算

基本概念

  • 取模:我们把a除以b所得的余数记为 a mod b
  • 整除:若x可以被y整除,则记为y|x,如:4|123|6;
  • 最大公约数: GCD(Greatest Common Divis)
  • 最小公倍数:LCM(Least Common Multiple)

gcd(x,y)可以通过辗转相除法得到

lcm(x,y)可以通过下面公式得到:
l c m ( x , y ) = x × y g c d ( x , y ) lcm(x,y)=\frac {x \times y} {gcd(x,y)} lcm(x,y)=gcd(x,y)x×y

1.基本规则

( a + b ) % p = ( a % p + b % p ) % p ( a − b ) % p = ( a % p − b % p ) % p ( a × b ) % p = ( a % p × b % p ) % p ( a b ) % p = ( ( a % p ) b ) % p (a+b)\%p=(a\%p+b\%p)\%p\\ (a-b)\%p=(a\%p-b\%p)\%p\\ (a\times b)\%p=(a\%p\times b\%p)\%p\\ (a^b)\%p=((a\%p)^b)\%p (a+b)%p=(a%p+b%p)%p(ab)%p=(a%pb%p)%p(a×b)%p=(a%p×b%p)%p(ab)%p=((a%p)b)%p

2.同余式

​ 若存在a mod m=b mod m,即a除以m与b除以m的余数相等,则记为:
a ≡ b ( m o d p ) a\equiv b(mod \quad p) ab(modp)

基本性质

​ 若存在:
a ≡ b ( m o d m ) 且 b ≡ d ( m o d m ) a\equiv b(mod\quad m) 且b\equiv d(mod\quad m) ab(modm)bd(modm)
​ 则有:
a + c ≡ b + d ( m o d m ) a − c ≡ b − d ( m o d m ) a × c ≡ b × d ( m o d m ) a+c \equiv b+d(mod \quad m)\\ a-c \equiv b-d(mod \quad m)\\ a\times c \equiv b\times d(mod \quad m) a+cb+d(modm)acbd(modm)a×cb×d(modm)

如果答案对一个数取模,那么先取模再加、乘都是不影响最终答案的。

注意:除法没有这些性质

3.剩余系

​ 是指对于某一个特定的整数的n,一个整数集合中的数模n所得的余数域。如果一个剩余系中包含了这个正整数所有可能的余数(一般来说,对于正整数n,最多有n个余数:0,1,2,…,n-1),则称剩余系是模n的一个完全剩余系。记作:
Z n Z_n Zn

​ 完全剩余系里的每一个元素代表了所有模n意义下与它同余的整数。例如n=5时,5的完全剩余系中的3实际上代表了3,8,13,18这些模5余3的数。在完全剩余系中的加法、减法、乘法全部都是在模n的意义下的,例如:在5的完全剩余系中,3+2=0,3*2=1。

4.逆元

​ 在实数运算中,除以一个数就等于乘以这个数的倒数,如果ab=1,则说明a与b互为倒数。在模运算中也有类似的概念,即逆元。

如果在n的完全剩余系中存在两个元素a,b满足ab=1,那么我们救说a,b互为模n意义下乘法的逆,记作:
a = b − 1 , b = a − 1 a=b^{-1},b=a^{-1} a=b1,b=a1
例如:在15的完全剩余系中,7*13=1,那么我们就说a,b互为模n意义下的逆元

​ 我们知道,除以一个数等于乘以这个数的倒数,在模运算中,若一个数存在逆元,那么除以一个数等于乘以这个数的逆元。例如,在5的完全剩余系中,
4 ÷ 3 = 4 × 3 − 1 = 4 × 2 = 3 4\div3=4\times3^{-1}=4\times2=3 4÷3=4×31=4×2=3

5.除法求模

  • 小费马定理

​ 若p为质数,且gcd(a,p)=1,则有
a p − 1 ≡ 1 ( m o d p ) a p − 2 ≡ 1 a ( m o d p ) a^{p-1}\equiv 1(mod\quad p)\\ a^{p-2}\equiv \frac {1}{a} (mod\quad p) ap11(modp)ap2a1(modp)
转化后:
b a ≡ b × a p − 2 ( m o d p ) \frac {b}{a} \equiv b\times a^{p-2}(mod\quad p) abb×ap2(modp)
此时,我们就将除法求模问题转换为了乘法求模问题。

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__羽辞__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值