素性检测实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
素性检测实验.doc

PAGE  PAGE 4 实验一 初等数论实验 1.2素性检测实验 素性检测被广泛运用于密码学算法,以寻找算法中需要的大素数(例如RSA)。另外,素性检测除了用于判断一个大于1的正整数是否为素数外,还可以用于寻找在给定范围内(例如[232, 264])的素数。 一、实验目的 熟悉常用的素性检测算法。运用高级程序设计语言实现一种素性检测算法的程序,加深对素性检测方法的理解。 二、实验原理 古希腊数学家Eratosthenes(公元前276~公元前195)发现了一种找出不超过一个给定正整数的所有素数的方法,称为Eratosthenes筛法(Sieve of Eratosthenes)。所谓筛法就是将不合条件的整数筛掉,而将符合条件的整数“捉住”。Eratosthenes筛法筛选由大于1并且小于或等于的所有自然数组成的数列。首先取第一个素数2,划去所有除2以外的2的倍数。在余下的正整数中,大于刚刚取到的素数2的第一个正整数,即正整数3被认定为素数,其倍数(不包括自身)同样从数列中划去。这一过程持续到找到一个大于的素数为止。在数列中没有被划去的正整数就是小于或等于的素数。 算术基本定理断言每一个大于1的正整数都可以唯一分解为有限多个素数的乘积。由此可见,素数是大于1的正整数的基石。以此断言为依据,为确定一个正整数是否为素数,基于Eratosthenes筛法的素性检测算法是一种最为朴素的判定方法,即让n试除所有小于n的平方根的素数,若找不到因子,则n为素数,否则n为合数。基于Eratosthenes筛法的素性检测是一种确定性的素性检测算法。下面通过一个例子具体说明基于Eratosthenes筛法的素性检测算法。 【举例】判断2543是否为素数 第一步:求2543的平方根, 第二步:使用Eratosthenes筛法求出小于51的所有素数,即2,3,5,7,11,13,17,19,23,29,31,37,41,43,47。 第三步:2543除以这15个素数,结果都不能整数。 第四步:得出结论,2543为素数。 对于较小的正整数(小于10,000,000),使用Eratosthenes筛法做素性检测是一种非常有效的方法。对于较大的正整数,Eratosthenes筛法因算法效率低而变得不实用。这是因为素数的个数是无限的,随着数据范围增大,素数分布变得越来越稀疏。表2-1为??亿以内的素数分布及其概率。可以看出,数据范围越大,是素数的概率越小。为了“捉住”一个较大的素数,Eratosthenes筛法需要付出大量的时间筛除不符合要求的数。 表2-1 十亿以内素数的分布及其概率 数据范围素数的个数素数的比例10440%1002525%100016816.8%10000122912.29%10000095929.592%1000000784987.8498%6645796.64579%10000000057614555.761455%10000000005.0847544%三、实验环境 操作系统:Windows 2000/XP/2003或以上版本。 应用软件:VC++ 6.0或以上版本。 实验软件包:PRIME-E工程。 四、实验内容和任务 本实验要求学生掌握常用的素性检测算法的实现方法,并运用高级程序设计语言实现一种素性检测算法。表2-2给出Eratosthenes筛法素性检测函数的接口定义,作为编程实现参考。Eratosthenes筛法素性检测的程序流程图如图2-1所示。 图2-1 Eratosthenes筛法素性检测程序流程图 表2-2 Eratosthenes筛法素性检测函数接口 函数int Eratosthenes (unsigned long n)功能Eratosthenes筛法检测正整数n是否是素数输入n (待检正整数)输出0,表示n不是素数; 1,表示n是素数。引入布尔类型数组a[i],数组下标i组成Eratosthenes筛法检测的数列。首先,将数组的所有元素a[i] = true,划掉数列中的某个元素i表示成a[i] = false。Eratosthenes筛法检测结束后,如果i是质数,那么a[i] = true,否则a[i] = false。在C++中,开方函数为sqrt(n)。 素性检测的界面实例如图2-2所示。输入n的值,选择素性检测算法,进行检测。点击重置按钮,可清空输入,以便重新输入测试值。 图2-2素性检测示例界面 五、实验步骤 本实验的大致步骤如下: 安装好所需的操作系统和VC++6.0集成开发环境。 下载实验软件包PRIME-E工程。如果还不熟悉VC++6.0的集

文档评论(0)

18273502 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档