【考研—密码学数论基础】(扩展)欧几里得算法、素数与素性测试

基础数论知识 为密码学构建奠定方法基础
(就是那些 本蒟蒻在高中就见过但是就是一直没能理解的东西)

一、 整除性 和 带余除法

记录 整除符号 x | y,表示y%x=0
顾名思义,就像小学一样,除法有 被除数a、除数b、商q、余数r
则 可写成下述形式: a=q*b + r

性质:给定任意数字对(a,b) 均有且仅有唯一的q,r使得上述等式成立。

二、 欧几里得算法gcd(a,b)

欧几里得算法,又名辗转相除法,即小学奥数学的那个。

1. 结论:
gcd(a,b)表示a和b的最大公因数
则gcd(a,b) = gcd(a, a%b)

2. 证明:
观察等式: a = q * b + r
设k为 a和b 的公因数
则 a可以被k整除 b可以被k整除 q*b可以被k整除
根据高斯同余,显然 余数r可以被k 整除
证毕。

3. 流程:
(这个是帮助理解扩展欧几里得)

a = q1 * b + r1
b= q2 * r1 + r2
r1= q3 * r2 + r3

r[n-2] = q[n]r[n-1] + r[n]
r[n-1] =q[n+1]
r[n] + 0
则易知 gcd(a,b)= r[n]

4. 代码:

int gcd(int a,int b){
	if(!b) return a;
	if(a>b) swap(a,b);
	return (a,a%b);
}

注:最大公倍数 [a,b] = a * b / gcd(a,b)

三、 扩展欧几里得算法ExGcd(x,y,a,b)

1. 结论:
对于方程
aX + bY = gcd(a,b)
一定存在整数解X,Y使等式成立

2. 证明/流程 :
回看 辗转相除法的流程
为了形式统一,将a记为 r[-1], b记为 r[0]

r[-1] = q1 * r[0] + r1
r[0]= q2 * r[1] + r2
r[1] = q3 * r[2] + r3

r[n-2] = q[n]r[n-1] + r[n]
r[n-1] =q[n+1]
r[n] + 0

则易知 gcd(a,b)= r[n]
且 r[n] 可根据递推式由 a,b 得出
同时可将递推式转为递归式:
r [n] = r[n-2] - q[n]*r[n-1]

r[n] = r[-1]X + r[0]Y
即gcd(a,b)= a
X + b
Y有整数解
证毕。

四、素数:

无穷性:无穷个素数
孪生素数:差值为2的两个素数称之为孪生素数

定理
对于整数n>1,若 an -1 为素数,则 a一定为2,且n一定为素数。
定理
如果2m +1 是素数,则m一定是2的方幂
费马素数
2^ ( 2n) 成为费马数字,如果它还是素数,则成为费马素数
费马数字与费马素数关系
费马数字是费马素数的概率极高,只有几个特殊值不是素数。
充要性质
如果a,b互素,则存在整数u,v使得ua+vb=1。
gcd(a,b)=1
素数p与任意整数a,关系仅仅可能是:互质or整除关系。

五、素性测试:

代码实现
目标:即判断一个数是否为素数

方法一:遍历除法 O(n)
跑一遍 2~n-1,找有没有数字n的因子
有则不是素数, 否则就是素数

方法二:埃拉托斯特尼筛 O( n(1/2)
易证:如果数n在(2,n-1)内有因数a,则一定有因数 n/a, 则a和n/a 一定其中一个 <= n(1/2) 另一个 >=n(1/2)
因此:不需要跑O(n) 只需要跑一半即可

其他高级筛法(考研不涉及,略)
方法三:欧拉筛
方法四:威尔逊测试
方法五:费马查表法
方法六:Miller-Rabin素性测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GoesM

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

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

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

打赏作者

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

抵扣说明:

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

余额充值