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

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. 算法导论之图的基本算法

    图是一种数据结构,有关图的算法是计算机科学中基础性的算法.这个论述恰如其分. 图的基本算法包括图的表示方法和图的搜索方法.图的搜索技术是图算法领域的核心,有序地沿着图的边访问所有顶点,可以发现图的结构 ...

  2. 算法导论中C语言代码,算法导论-学习笔记与进度

    算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...

  3. 算法导论 pdf_学习数据结构和算法最好的书是什么?

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

  4. 算法导论——24.2 DAG最短路径算法java实现

    介绍 Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题,但是对于DAG,可以有更加简化的算法去计算,使得时间复杂度更低. 针对DAG的特点,以拓扑排序为基础,提出了解 ...

  5. 算法导论-上课笔记7:贪心算法

    文章目录 0 前言 1 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2 贪心算法原理 2.1 贪心选择性质 2.2 最优子结构 2.3 ...

  6. 算法导论之概率分析和随机算法

    在问题的分析中应用概率技术称为概率分析,前期是对所有可能的输入集合可以做假定.如果无法对输入分布做合理性建模,如果一个算法的行为不只是由输入决定,同时也由随机数生成器所产生的数值决定,则为随机算法.行 ...

  7. 【转】算法导论学习笔记 一 分治算法

    分治策略是一种常见的算法.在分治策略中,我们递归的求解一个问题,在每层递归中应用如下三个步骤: 1. 分解,将问题分解成规模更小但解决方案相同的子问题 2. 解决,递归的求解子问题,如果子问题足够小则 ...

  8. 《算法导论3rd第一章》算法在计算中的作用

    前言 什么是算法?为什么算法值得研究?算法的作用是什么 算法 算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合做为输出.即就是把输入转换成输出的计算步骤的一个序列. ...

  9. 【算法导论06】递归算法-perm算法

    06递归算法-perm算法 问题描述: 给定一个含有n个数字的序列,设计算法对该序列进行全排列. 思路分析: 对n个数字序列进行全排列,最简单的思考方式是将n个数字依次作为序列的开头,得到n个n维序列 ...

最新文章

  1. 如何从菜鸡变成收割机,大厂面试的算法,你懂了吗?
  2. 如何理解“跳出率”,它对SEO有什么影响?
  3. 返回,返回无,根本没有返回?
  4. LeetCode——Pascal#39;s Triangle
  5. gcc -l参数和-L参数
  6. 宽字符编码和解码通用类[CodeWidthChartUtility]
  7. 【算法分析与设计】实验 分治算法解决Gray码问题
  8. BugBugBugBugBugBugBugBugBugBugBugBugBugBugBug
  9. CTF-web题之简单的SQL注入
  10. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux...
  11. 远程主机强迫关闭了一个现有的链接
  12. flask 8用户认证_Salted Password Hashing
  13. 狗狗的年龄的python编程_狗狗与人年龄换算表,终于知道狗狗多大了!
  14. Log BERT 日志异常检测
  15. 本体技术视点 | 数据的去中心化协作和可信流动(一)
  16. 嵌入式Linux_USB_U盘自动检测识别
  17. 外星人游戏本哪一款好?追求完美体验首选X系列
  18. 斐波那契数列、小青蛙跳台阶
  19. spring边边角角
  20. html英文怎么读,tail是什么意思英语,tail怎么读啊!

热门文章

  1. iis7 php安装教程,iis7 php安装方法详解
  2. 修改wamp的apache默认端口80为8088以及www目录
  3. 初探运算符重载------(减号)
  4. 02.规划过程组表格-需求管理计划
  5. [BZOJ] 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
  6. jquery-easyui环境的搭建及测试
  7. 【week3】psp (技术随笔)
  8. [置顶] 软件设计之道_读书纪要.doc
  9. Facebook API使用经验分享
  10. Spring.net 模块组成