有关数论的算法

有关数论的算法

数论算法研究的是一些大整数,所以需要考虑输入规模和基本算数的运算代价。对于数论算法来说,衡量其所要求的位操作的次数是比较适宜的。在这种模型中,进行两个b位(二进制位)的数乘法,需要进行O(b2)次位操作,在实际操作中,O(b2)算法通常是最好的,我们将用这个界作为分析的基础。

1.      初等数论的概念

a.       整除性和约数

一个正整数a总可以被其平凡约数1和a整除,其非平凡约数称为因子。比如,20的平凡约数是1和20,非平凡约数是2,4,5,10。

b.       素数和合数

对于任意一个整数 a>1, 如果只有1和a两个平凡约数,则称为素数(或者质数)。如果a>1且不是素数,则它是合数。1既不是素数也不是合数,称为基数。

c.       除法定理,余数和同模

【除法定理】对于任意整数a和任意正整数n,存在整数q和r,满足 0≤r<n,并且 a =q*n+r.

其中 q=floor(a/n)称为除法的商,值r = a mod n称为除法的余数。

根据除法所得的n个余数(0~n-1),可以将整数分成n个等价类。

d.       公约数与最大公约数

如果 d|a 并且 d|b, 则称d是a和b的公约数。

d|a 且 d|b, 则 d|(a+b), d|(a-b)

更一般的,d|a 且 d|b, 则 d|(ax + by)

两个不同时为0的整数a和b,记gcd(a,b)为其最大公约数, 如果a,b都不为0,则 gcd(a,b)是在[1, min(|a|,|b|)]内的一个数。

如果定义gcd(0,0)=0,则最大公约数具有以下性质:

gcd(a,b)=gcd(b,a)

gcd(a,b)=gcd(-a,b)

gcd(a,b)=gcd(|a|,|b|)

gcd(a,0)=|a|

gcd(a,ka)=|a|

【定理】a,b是不都为0的整数,则gcd(a,b)是线性组合{ax+by}中的最小正元素。

【推1】d|a且d|b, 则d|gcd(a,b)

【推2】gcd(an, bn) = n gcd(a,b)

【推3】d|ab, gcd(d,a) = 1, 则 d|b

e.       互质数

若a!=b, gcd(a,b)=1则称为a与b为互质数

【定理】对任意整数a,b,p,如果gcd(a,p)=1且gcd(b,p)=1, 则gcd(ab,p)=1

f.       唯一因子分解

【定理】p为素数,p|ab,则p|a或者p|d

【唯一因子分解定理】合数a仅能以一种方式写成如下形式

a=p1e1p2e2p3e3… 其中pi是素数,ei是正整数。

2.      最大公约数

根据gcd(a,b)=gcd(|a|,|b|),最大公约数问题可以只在0和正整数范围内讨论。

欧几里得算法是计算两个整数最大公约数的一个有效算法,该算法基于以下定理。

a.       GCD递归定理

【定理】对于任意整数a>=0 和任意整数b>0, gcd(a,b)=gcd(b, a mod b)

b.       欧几里得算法

欧几里得算法是上面定理的一个递归过程,其输入a和b均为非负整数。

EUCLID(a, b)

If (b == 0)

returna;

else

 return EUCLID(b, a mod b)

c.       欧几里得算法的运行时间

【引理】如果a>b>=1,并且欧几里得算法执行了k>=1次递归调用,则 a >= Fk+2,b >= Fk+1

【定理】对任意整数k>=1, 如果a>b>=1, 且 b<=Fk+1, 则EUCLIK(a,b)的调用次数小于k次

如果a,b是两个连续的斐波那契数,则运行时间达到上述定理的上界。

【Q】所有斐波那契额数都互质?

d.       扩展欧几里得算法

前面提到gcd(a,b)是线性组合ax+by中最小的正元素,可以将欧几里得算法做一扩展,在得到gcd(a,b)的同时,也得到x,y的值。

EX-EUCLID(a, b)

If (b == 0)

return(a,1,0);                      // a = a*1 +b*0

else

(d1,x1,y1) = EX-EUCLID(b, a%b);

(d,x,y) = (d1,y1, x1 – a/b * y1);

return (d,x,y)

一个运算过程的例子如下:

a b     x y

2 0     1 0

10 2     0 1

12 10     1 -1

22 12     -1 2

78 22     2 -7

100 78     -7 9

最后的结果是gcd(100,78) = 2 = 100*(-7) + 78*9

【ex_auclid算法可用来求模倒数】

3.      模运算

4.      求解模线性方程

5.      中国余数定理

6.      元素的幂

7.      RSA公钥加密系统

8.      素数的测试

9.      整数的因子分解


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值