算法之数论

这篇具有很好参考价值的文章主要介绍了算法之数论。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数论


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)
此时,我们就将除法求模问题转换为了乘法求模问题。文章来源地址https://www.toymoban.com/news/detail-831394.html

到了这里,关于算法之数论的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数论——卢卡斯定理、求组合数 学习笔记

    温馨提示:组合数一般较大,下面的示范代码均无视数据范围,如果爆 int 请自行开 long long 或高精度处理。 从 (n) 个不同元素中,任取 (m) 个元素组成一个集合,叫做从 (n) 个不同元素中取出 (m) 个元素的一个组合;从 (n) 个不同元素中取出 (m leq n) 个元素的所有组合

    2024年02月08日
    浏览(40)
  • 数论——欧拉函数、欧拉定理、费马小定理 学习笔记

    定义 欧拉函数(Euler\\\'s totient function),记为 (varphi(n)) ,表示 (1 sim n) 中与 (n) 互质的数的个数。 也可以表示为: (varphi(n) = sumlimits_{i = 1}^n [gcd(i, n) = 1]) . 例如: (varphi(1) = 1) ,即 (gcd(1, 1) = 1) ; (varphi(2) = 1) ,即 (gcd(1, 2) = 1) ; (varphi(3) = 2) ,即 (gcd(1, 3

    2024年02月08日
    浏览(42)
  • 数论——线性同余方程、乘法逆元 学习笔记

    众所周知: 如果爆 int 请自行开 long long 或边读边模,或高精度处理。 定义 若 (a bmod m = b bmod m) ,则称 (a) 与 (b) 关于模 (m) 同余,记为 (a equiv b pmod m) . 同余的性质 反身性: (a equiv a pmod m) ; 对称性:若 (a equiv b pmod m) ,则 (b equiv a pmod m) ; 传递性:若 (

    2024年02月08日
    浏览(45)
  • 蓝桥杯AcWing学习笔记 8-1数论的学习(上)

    我的AcWing 题目及图片来自蓝桥杯C++ AB组辅导课 蓝桥杯省赛中考的数论不是很多,这里讲几个蓝桥杯常考的知识点。 欧几里得算法代码: 就是因式分解的定理,所有的整数都可以唯一分解成若干个质因子乘积的形式: N = P 1 α 1 × P 2 α 2 × . . . × P k α k N=P_{1}^{α_{1}}×P_{2}^{α

    2024年01月16日
    浏览(80)
  • 【数论】扩展欧几里得算法(EXTENDED-EUCLID)

    本文整理梳理了一些有关扩欧算法的内容,力求深入浅出便于理解,对一些作者在初次接触此算法时的不解(比如一些不是很好看出来的“易得”“显然”hh)通过数学形式呈现与推导。本文涉及的数学推导非常简单。代码均采用C++。 限于作者能力有限可能有些地方表述不清

    2024年02月17日
    浏览(38)
  • 数论 --- 约数和定理公式推导、最大公约数、欧几里得算法

    和试除法判断一个数是不是质数是一个道理 从小到大枚举所有的约数,如果当前数能整除这个数的话,说明这个数就是当前数的约数 优化,与试除法判断质数是一样的 如果 d 是 n 的约数,n / d 也一定能整除 n,一个数的约数也一定是成对出现的,在枚举的时候也可以只枚举

    2023年04月08日
    浏览(83)
  • [数论第二节]欧拉函数/快速幂/扩展欧几里得算法

    欧拉函数 (varphi(N)) : 1-N中与N互质的数的个数 若 (N = p_1^{a_1} · p_2^{a_2} · p_3^{a_3} ··· ·p_n^{a_n}) 其中p为N的所有质因子 则 (varphi(N) = N(1-frac{1}{p_1})(1-frac{1}{p_2})···(1-frac{1}{p_n})) 证明: 互质:两数的公共因子只有1 去掉所有与N有(大于1的)公共因子的数,剩下的数就是与

    2024年02月14日
    浏览(49)
  • 【算法每日一练]-数论(保姆级教程 篇3 )#越狱 #找朋友 #全部相同 #方形 #tax

    目录 今日知识点: 基于涂色问题的组合数 求所有数的最大公约数 阶乘质因数分解 哥德巴赫猜想 越狱 找朋友 全部相同  方形 tax                   监狱有n个房间,每个房间关一个犯人,有m种宗教,一个犯人信仰一种。如果相邻的房间犯人信仰同一种宗教就会越狱。

    2024年02月03日
    浏览(44)
  • [Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)

    题目链接:LeetCode-1979. 找出数组的最大公约数 辗转相除法其核心部分为:若r 是a ÷ b的余数,则 gcd(a, b)=gcd(b, r) 题目链接:LeetCode-204. 计数质数 如果 x 是质数,那么大于 x 的 x 的倍数 2x,3x,… 一定不是质数。 时间复杂度分析: 外层循环的迭代次数是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    浏览(38)
  • 【网络安全】【密码学】【北京航空航天大学】实验二、数论基础(中)【C语言和Java实现】

    1、扩展欧几里得算法(Extended Euclid’s Algorithm) (1)、算法原理 已知整数 a , b ,扩展的欧几里得算法可以在求得 a , b 的 最大公约数 的同时,找到一对整数 x , y ,使得 a , b , x , y 满足如下等式: ax + by = d = gcd(a,b) , 其中 gcd(a, b) 为 a 和 b 的最大公约数。 (2)、算法流程 本算

    2024年02月01日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包