数论基础的补充讲解

数论基础的补充讲解

整除的一些性质:

(1)能被2整除的数,个位上的数都能被2整除

(2*)能被4整除的数,个位和十位所组成的两位数能被4整除

(3*)能被8整除的数,百位、十位和个位所组成的三位数能被8整除

(4)能被5整除的数,末尾是0或5

(5*)能被25整除的数,十位和个位所组成的两位数能被25整除

(6*)能被125整除的数,百位、十位和个位所组成的三位数能被125整除

(7)能被3整除的数,各个数位上的数字之和能被3整除

(8*)能被9整除的数,各个数位上的数字和能被 9 整除

(9)如果一个数既能被 2 整除又能被 3 整除,那么这个数能被 6 整除

(10)如果一个数既能被 2 整除又能被 5 整除,那么这个数能被 10 整除(即个位为0)

(11*)能被 11 整除的数,奇数位(从左往右数)上的数字和与偶数位上的数字和的差(大数减小数)能被 11 整除

小数的GCD:

eps控制精度,fmod是C++的库函数,运算浮点数的mod运算。

拓展欧几里得:

Ps:关于欧几里得和拓展欧几里得可以参考我的另外一篇博文《欧几里得 & 拓展欧几里得算法 讲解 (Euclid & Extend- Euclid Algorithm)

(1)求解不定方程:

所谓不定方程,即未知数的个数多于方程个数,且未知数受到某些限制(如要求是有理数、整数或正整数等等)的方程或方程组。

如3x-4y==6,方程只有一个,但是解却可以有多个。

求解不定方程的一组解,或者判断不定方程是否有解,扩展欧几里得就可以派上用场了。   

(2)求解模线性方程(线性同余方程):

求解ax≡b(mod p),未知数x的最小解。   

(3)求解模的逆元:     

同余方程ax≡b(mod n),如果gcd(a,n)==1,则方程只有唯一解。在这种情况下,如果b==1,同余方程就是ax ≡ 1(mod n),gcd(a,n)=1。这时称求出的x为a的对模n乘法的逆元。

PS:关于逆元,有一个蛮有用的性质:    

设p为素数,(a/b)% p = a * b^(p-2) % p ,这样就可以将除法处理为乘法。

素数:

 定义

  素数是大于1的正整数,并且除了1和其本身不能被其他的正整数整除。

  非素数称为合数。

 素数的 eratosthenes 筛法

   筛法是数论中一个比较重要的算法,在O(sqrt(N))的时间内获得N以内所有的素数。

   所谓筛法,就是每次筛去一部分数。如图,起始所有的数都标记为素数,遇到2时,将所有2的倍数标记为合数,以此类推下去,剩下的都是素数了。

   

该算法适用于较小的MAXN,对于较大的MAXN,内存无法开如此大的空间。

 区间素数

  获得[L , U]区间的素数,L和U很大,但是U-L不是很大。

  首先线性筛出1到sqrt(2147483647)之间所有的素数(2147483647是啥?自个儿猜去~),然后再通过已经晒好素数筛出给定区间的素数。

算是模板吧,此处不贴代码~

素数判定

 试除法

   就是大家都会的简单算法,用小于该数的所有素数去试除,若都无法整除,则为素数,复杂度O(sqrt(N)).

 Miller-Robin随机素性测试

   关于Miller-Robin算法,可以另劈一章进行讲解,因而此处只做简略介绍。

   Miller-Rober 带有随机性,可能测出伪素数,概率为1/(2^s),一般 s 为 20 左右,

   因而失误概率很低,适用于大数素性判断。

   关于Miller-Robin的时间复杂度,最坏为(1+O(1))*log2(N)。Miller- Rabin算法的性能是很好的。在实际应用中,Miller-Rabin的实际执行速度也很快。

唯一分解理论

定义:自然数N皆可以表示为素数之积

一些结论:

①、N的约数个数,为(x1+1)*(x2+1)*……*(xm+1)

分解质因子

普通的分解质因数

   对n进行分解质因子,将分解的因子存入数组facs中,长度为cnt。

   先找一个最小的质数k;

   若该质数等于n,则分解质因子的过程已经结束;

   若n>k,且k|n,则记录k,n/=k,然后继续寻找;

   若n不能被k整除,k+=2,继续寻找。

Pollard_rho因数分解

   适用于大数的分解质因子,返回的质因子无序。

欧拉函数

中国剩余定理

参考资料:

①、东北师范大学数论基础讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 21:54:58

数论基础的补充讲解的相关文章

数论基础的补充解说

数论基础的补充解说 整除的一些性质: (1)能被2整除的数,个位上的数都能被2整除 (2*)能被4整除的数,个位和十位所组成的两位数能被4整除 (3*)能被8整除的数,百位.十位和个位所组成的三位数能被8整除 (4)能被5整除的数.末尾是0或5 (5*)能被25整除的数.十位和个位所组成的两位数能被25整除 (6*)能被125整除的数.百位.十位和个位所组成的三位数能被125整除 (7)能被3整除的数,各个数位上的数字之和能被3整除 (8*)能被9整除的数.各个数位上的数字和能被 9 整除 (9

数论基础学习总结(持续补充中)

数论基础 算术基本定理(唯一分解定理) 任何一个大于1的自然数都可以唯一分解成有限个素数的乘积 $N=p_1^{a_1}\times p_2^{a_2}\times...\times p_n^{a_n} | p_1<p_2<...<p_n ,a_i\in Z$ 上式中$p_i$为素数 有关素数筛 埃式筛法 就是拿一个已经筛选出的素数去排掉其他的数,比如2是素数,就用他筛掉2*2,2*3,2*4……,3是素数,就用他筛掉3*2,3*3,3*4……,把每个素数的倍数都筛掉,不过我们发现,3*

你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是Hash算法,RSA算法等密码学的入门基础. 二维码生成算法最为核心的就是编码规则和纠错码字的生成.本篇专门讲解纠错涉及到的伽罗瓦域(Galois Field).本文内容大部分是阅读<密码编码学与网络安全>后参考相关PPT编写,如有遗漏或不严谨地方请参考专业书籍. 数论基础 整除,因数,素数 设 a , b(b≠0)

python基础数据类型补充以及编码的进阶

一. 基础数据类型补充内容 1.1 字符串 字符串咱们之前已经讲了一些非常重要的方法,剩下还有一些方法虽然不是那么重要,但是也算是比较常用,在此给大家在补充一些,需要大家尽量记住. #captalize :首字母大写 #swapcase :大小写翻转 #title :每个单词的首字母大写 #center :内同居中,总长度,空白处填充 #寻找字符串中的元素是否存在 #find :返回的找到的元素的索引,如果找不到返回-1 #index :返回的找到的元素的索引,找不到报错. #captalize

七. 基础数据类型补充内容

一. 基础数据类型补充内容 1.1 字符串 字符串咱们之前已经讲了一些非常重要的方法,剩下还有一些方法虽然不是那么重要,但是也算是比较常用,在此给大家在补充一些,需要大家尽量记住. #captalize,swapcase,title print(name.capitalize()) #首字母大写 print(name.swapcase()) #大小写翻转 msg='taibai say hi' print(msg.title()) #每个单词的首字母大写 # 内同居中,总长度,空白处填充 ret

数论基础题目八题【欧几里得】【筛法素数】【中国剩余定理】

之前看的数论的知识,现在做几道题目找找感觉..... poj 1061 传送门 题目大意,给你x,y,m,n,L.代表青蛙a的坐标x,青蛙b的坐标y,青蛙a一次跳的距离m,青蛙b一次跳的距离n,以及mod的值L,求经过多少次跳相遇.即求:(m-n)*x0=(x-y)(mod L);  模线性方程的解,不过要注意处理,因为(m-n)和(x-y)有可能是负的,如果(m-n)是负的,则直接对俩数取负数,下面就是对 ((x-y)+L)%L. 然后就能用modular_linear_equation(LL

「数论基础」欧拉定理(费马小定理)

在阅读本篇之前,如果还不熟悉欧拉函数,可以参见另一篇介绍欧拉函数的「数论基础」欧拉函数. 定义:对于互质的两个正整数$a, n$,满足$a^{φ(n)} ≡ 1\  (mod\ n)$ 证明: 设集合$S$包含所有$n$以内与$n$互质的数,共有$φ(n)$个:     $S = \{ x_1, x_2, ..., x_{φ(n)} \} $ 再设集合$T$: $T = \{ a * x_1 \% n, a * x_2 \% n, ..., a * x_{φ(n)} \% n \} $ 由于$

深浅拷贝和基础类型补充

1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 join() "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串 split() 切割. 切割的结果是列表 列表和字典: 都不能在循环的时候直接删除 把要删除的内容记录在新列表中然后循环这个新列表. 删除列表(字典) fromkeys() 坑1: 返回新字典. 不会更改老字典 坑2: 当value是可变的数据类型. 各个key

基础数据类型补充

?. 基础数据类型补充  ?先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的??看?看就可以了.我们补充给?个字符串基本操作 li = ["李嘉诚", "麻花藤", "?海峰", "刘嘉玲"]s = "_".join(li)print(s)li = "?花?闺?"s = "_".join(li)print(s) 列表:     循环删除列表中的每?