算法导论之有关数论的算法

关于数论,想到的就是密码系统和大素数。大素数的易求和因子分解的高难度是密码系统安全性的数学基础。输入一个大的整数,用位操作次数来衡量数论算法的时间性能。

1)初等数论概念

关于整数集合Z={…,-2,-1,0,1,2,…}和自然数集合N={0,1,2,…}的初等数论概念。

第一:整数性和约数

一个整数能被另一个整数整除,记号为d|a(d整除a),意味着对某个整数k,有a=kd。如果d|a且d≥0,则说d是a的约数。

对每个整数a来说,1和a是其平凡约数,而a的非平凡约数称为a的因子。

第二:素数和合数

对于某个整数a>1,如果它仅有平凡约数1和a,则称a为素数或质数,素数有无穷多个。

不是素数的整数a>1称为合数。当然整数0和所有负整数既不是素数也不是合数。

第三:余数和模

对任意整数a和任意正整数n,存在唯一的整数q和r,满足0≤r<n,并且a=qn+r;其中q就是除法的商,r就是除法的余数。r=a mod n。

第四:公约数和最大公约数

如果d是a的约数并且也是b的约数,则d是a和b的公约数。两个不同时为0的整数a和b的最大公约数表示为gcd(a,b)。对任意整数x和y,有:

d|a并且d|b蕴含着d|(ax+by)

如果a和b是都不为0的任意整数,则gcd(a,b)是a与b的线性组合集合{ax+by:x,y∈Z}中的最小正元素。

对任意整数a和b,如果d|a并且d|b,则d|gcd(a,b)。

对所有整数a和b以及任意非负整数n,gcd(an,bn)=ngcd(a,b)。

对所有正整数n,a和b,如果n|ab并且gcd(a,n)=1,则n|b。

第五:互质数

如果两个整数a和b仅有公因数1,即如果gcd(a,b)=1,则a和b称为互质数。

对任意整数a,b和p,如果gcd(a,p)=1且gcd(b,p)=1,则gcd(ab,p)=1。

第六:唯一因子分解

这是素数整除性的一个重要基础。

对所有素数p和所有整数a,b,如果p|ab,则p|a或p|b或者都成立。由此可得唯一质因子分解定理。

合数a仅能以一种方式,写成如下的乘积形式:


其中pi为素数,p1<p2<…<pr,且ei为正整数。

如数6000可以唯一分解为24*3*53

2)最大公约数

计算两个整数的最大公约数是数论的基础算法,运用欧几里得算法可有效计算,其运行时间和斐波那契数存在联系。

一般情况下,最大公约数的求解,可以通过素数因子分解来完成。假设正整数a和b的最大公约数gcd(a,b):


如果r项不足则使用零指数,使素数结合p1,p2,…,pr对于a和b是相同的,容易得出:


然而素数分解因子的算法是在多项式时间内无法完成的。因此需要通过欧几里得算法来有效求解。

欧几理得求解最大公约数的算法,基于GCD的一个递归原理:对任意非负整数a和任意正整数b,有

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

通过递归程序来实现欧几理得的算法(约公元前300年的几何原本中描述的):

Func_Euclid(a,b){

    if b=0

        then return a

    else return Func_Euclid(b,a mod b)

}

欧几里得算法的运行时间和斐波那契数有关联。

如果a>b≥1并且Func_Euclid(a,b)执行了k≥1次递归调用,则a≥Fk+2,b≥Fk+1

对任意整数k≥1,如果a>b≥1并且b<Fk+1,则Func_Euclid(a,b)递归调用次数少于k次。

推广欧几理得算法,求解下列方程式的x和y:

d=gcd(a,b)=ax+by

先看函数:

Func_Extend_Euclid(a,b){

    if b=0

        then return ( a,1,0)

    (d’,x’,y’)= Func_Extend_Euclid(b,a mod b)

    (d,x,y)=(d’,y’,x’-(a/b)y’)

    return (d,x,y)

}

其中y= x’-(a/b)y’是扩展算法的关键,递归到最底层时,x=1,y=0,是基础解。

欧几理得算法及其推广形式中很重要的是a mod b的模运算。













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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值