1 . 问题点: “ 有限时间 ”、“ 尽可能大”、“ 素数 ”
“素数“ :需要经过素性测试合格后的数字
“有限时间”:测试一个数字,可接受的时间内,并非无穷尽的依靠暴力求解
“尽可能大”:可检测数的上限
2 . 问题点求解
2 . 1 “ 素 数 ”
1) 概 念: 大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数称为质数,
素数有无限个。
2) 素性测试待测方法:
方法一: 根据定理检测 (真 素 数 测 试)
方法二: 改进版定理检测 (真 素 数 测 试)
方法三: 一般筛选法 (真 素 数 测 试)
方法四: 改进版筛选法 (真 素 数 测 试)
方法五: Miller Rabin 算法(概 率 素 数 测 试)
2 . 2 “ 有 限 时 间 ”
1) 待测方法介绍
· 根据定理检测
顾名思义,这种方法是根据概念进行试除计算,即:一个数字仅能被 1 和本身
整除。若存在其他数字可以整出此数字,则为合数,反之为素数(质数) 。
优点 : 易理解素数概念
缺点 : 每对一个数字进行素性测试,都需要从 2试除至待测数字的上一个数
字,效率低下。
· 改进版定理检测
根据概念,是否为素数,是判断存在数字能整除待测数字(1 和本身除外)。而一旦存在此数字,由于数字是成对出现,因此只需要判断数字对中最小的一个数字即可。得到:“ 任意一个数的最大质因数都小于或等于这个数的平方根 ”。因此,在对待测数字进行素性测试时,仅需要从 2 试除至待测数字的平方根即可,可以减少一些测试时间。
优点 : 能稍微减少一些测试时间
缺点 : 每对一个数字进行素性测试,都需要从 2试除至待测数字的平方根,效
率依然低下。
· 一般筛选法
我们知道,2 是素数,可以得出,2的倍数都是合数。我们还知道,3 是素数,可以得出,3 的倍数也都是合数。有:“ 素数的倍数都是合数 ”所以根据以上,我们可以通过几个初始的素数表,找到所有的合数,并将素数筛选出来。
优点 : 能大幅减少测试时间
缺点 : 依然对于很多数字进行重复筛选,影响效率。
· 改进筛选法
例如:需要找 100 之内的素数,对于 30 这个数字 :
30= 2 X 15
30 既是 2 的倍数,也是 15 的倍数,因此在一般的筛选法的过程中,30 在 2 的时候被筛选一次,在 15 的时候会被再次筛选一次。当数量级较大时,这种情况就会十分影响效率。所以,在改进的筛选方法中,这种情况应被避免,