




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AKS算法及其素数判定的C语言实现马云涛西南交通大学、四川 成都摘要:最近,印度的三个计算机科学家Manindra Agrawal、Neeraj Kayal和Nitin Saxena提出了一个称为AKS的算法。使用这个算法证明了可在多项式时间内对一个整数是否为素数进行确定性的判定,从而解决了一个古老的数学问题。这个结果对于数论和计算复杂性理论的研究与发展具有重要意叉。由于现代密码学正是建立在整数分解理论和计算复杂性理论的基础之上,因此这个算法对现代密码学的影响引起了人们的关注。该文将就此进行阐述。关键词:AKS算法 现代密码学 RSA算法AKS algorithm and its prime numbers to determine by the C program language百科词典 Loading.同反义词 相关例句 英英解释 Ma Yun TaoSouthwest Jiaotong University , Chengdu SAbstract: Recently,three computer scientists Manindra Agrawal,Neeraj Kayal and Nitin Saxena in India present algorithm called AKS By this algorithm they give a proof that it is possible to determine if a number is a prime in polynomial timeSo,they have cracked an age-old mathematical problemThe result has important significance to research and development in both number theory and computational complexity theoryBecause modern cryptography is based on the theory of integer factoring and the computational complexity theory ,the effect of this algorithm to modern cryptography has been paid significant attentionIt will be discussed in this paperKeywords:AKS algorithm,Modem cryptography,RSA algorithm1 引 言很久以来,素数问题是一个使得很多数学家着迷的问题。素数就是一个除了l和它自身以外不能被其它数整除的数。素数的一个基本问题是如何有效地确定一个数是否是一个素数,即素性测试问题。素性测试问题不仅在数学上是一个有挑战性的问题,而且在实际中也是非常重要的。例如,很多现代密码学应用通常需要确定一个几百位的素数。如果不采用一些专门有效的方法,即使人们使用运行速度最快的计算机来测试一个l00位的十进制整数,那么花费的时间将超过宇宙存在的时间。数学家尝试设计对素数的有效测试已经长达两千多年了。Eratosthenes筛法是对于所有素数都有效的最古老的算法,然而它的时间复杂性是输入规模的幂指数,因此在实际中使用它是不合适的。l7世纪的Fermat小定理是一些有效素性测试算法的起点,但其逆定理是不满足的。上世纪80年代,这个领域的普遍观点是应该存在一个用于素性测试的确定的多项式时间算法,但没有人能给出证明。当前,已经确立了一些素性测试算法,但是它们都存在一些问题。一些算法是非常快速的,但是这些算法会以很小的概率产生一个错误结果;另一些算法是有条件的,如使用了未证明的假设;还有一些算法是确定的也是无条件的,但不能在多项式时间内完成。因此,设计一个在多项式时间内每次都给出一个正确回答的有效算法在计算机科学和数学中都是一个挑战。多年来,研究者们已经尝试了很多方法,包括使用了一些复杂的数学技术,但没有一个成功。然而,到了2002年8月这一情况有了改变。Manindra Agrawal教授和他的两个学生Neeraj Kayal,Nitin Saxena设计了一个被称为AKS的算法,该算法是一个用于素性测试的多项式时间的确定算法。这一结果被认为是这一领域的一个主要突破。一些权威认为这个算法将产生广泛的影响,而最直接的就是对整数理论和计算复杂性理论的影响。由于现代密码学正是以整数分解理论和计算复杂性理论为基础,因此AKS 算法对现代密码学的影响引起了人们的关注。RSA算法是现代密码学中应用最为广泛的一个算法, 同时它既可用于加密,又可用于数字签名。2 AKS算法简介Manindra Agrawal教授和他的两个学生Neeraj Kayal和Nitin Saxena在坎普尔印度技术研究所开发设计了AKS算法。AKS算法证明了可以应用一个确定的算法在输入规模的多项式时间内决定一个整数是否为素数的问题,而没有使用任何未证明的数学假定。下面是AKS算法的简要描述。Input : integer n11. If (n=ab for aN and b1), output composite.2. Find the smallest r such that Or(n)log2n.3. If 1(a,n)n for some ar ,output composite.4. If nr, output prime.5. For a=1 to logn doif (X+a)nXn+a(mod Xr-1,n) ,output composite.6. output prime.尽管理解算法的原理有一些困难,但程序的理解是很容易的。算法的详细解释,请参考文献【l】。AKS算法是一个新颖的、有趣的、优美的算法,它解决了一个很多世纪没有解决的基本问题。AKS算法的最重要之处就是它是相当简单的,不需要特殊的椭圆曲线数学及类似知识。AKS算法不是其他人工作的简单推广,它摒弃了把已有的方法集中到一起的想法,而是探索使用简单的代数概念来解决问题的方法。尽管思想是简单的,但是非常有创造性。然而,这个算法目前可能不会有太多的实际应用。这是因为算法的运行时间是O(1og n) ),与Miller和Rabin设计的概率测试的O(1og7,)运行时间相比是相形见绌的。研究者们注意到如果某个猜想被证明。算法可以在O(1ogn) )时间内运行,这样的改善将促进实际的应用。研究者们还证明如果Sophie Germain素数具有期望的分布,那么在时间估计中的指数l2可以减少到6当然如果发现素数的分布并非如此,那将会有很大区别。笔者将不得不期待算法的有效实现。AKS算法最重要的意义是为一个理论结果,为这一领域的研究奠定了基础。之后在技术上将会进行改进与完善,使之更为实用。3 AKS算法的C语言实现#include #include #include #include unsigned long gcd(unsigned long n,unsigned long r)if(!r) return n; return gcd(r,n%r);int cf(unsigned long n) double i; for(i=2;i=ceil(log(n)/log(2);i+) if(pow(n,1/i)-floor(pow(n,1/i)=0) return 1; break; return 0;int test(unsigned long r) unsigned long i=2; while(i=sqrt(r) if(i%r!=0) i+; else return 0; return 1;unsigned long syz(unsigned long r)unsigned long i=2; while(i=sqrt(r) if(i%r!=0) i+; else r=r/i; return r;unsigned long pf(unsigned long a,unsigned long b,unsigned long r)unsigned long z=1; while(b!=0) if(b%2=0) b=b/2; a=(a*a)%r; else b=b-1; z=(z*a)%r; return z;unsigned long mods(unsigned long n,unsigned long r,unsigned long a) int x=5;/ unsigned long f=1,g=x*a,y=n,h; while(y!=0) if(y%2=0) y=y/2; h=g*g; g=h%(unsigned long)(pow(x,r)-1); else y=y-1; h=f*g; f=h%(unsigned long)(pow(x,r)-1); return f;void main() unsigned long a=1;int x=5;unsigned long n;printf(输入一个整数 n=);scanf(%lu,&n);if(n2) printf(请输入一个大于1的整数!n);exit(0);if(cf(n)=1) printf(%lu是一个合数!n,n); exit(0);else if(cf(n)=0)unsigned long r=2; while(r=4*sqrt(r)*(unsigned long)(log(n)/log(2)&pf(n,(r-1)/q,r)!=1)break; r=r+1; for(a=1;a=2*sqrt(r)*(unsigned long)(log(n)/log(2);a+)if(mods(n,r,a)!=(unsignedlong)pow(x,n)-a)%(unsigned long)pow(x,r)-1)printf(%lu是一个素数n,n);break;exit(0);printf(%lu是一个合数n,n);break;结果:输入 13输出 素数输入 56输出 合数4 结束语该文介绍了AKS算法,并用C语言对其进行了实现。由于比目前广泛使用的素性测试方法运行速度慢的原因,使得AKS还不能得到实际的应用。然而,普遍认为许多研究者会致力于AKS算法的改进工作,减少算法运行所需的时间花费,使得算法大为改善。从而就密码学意义而言,尤其是在某些需要大的素数而又不允许发生任何错误的情况下,使其优于当前用于鉴定素数的通用算法。参考文献1M Agrawal,N Kayal,N SaxenaPrimes is in Phttp:/www.cse.iitk.ac.in/news/primality.pdf23Michael Sipser. Introduction to Theory of ComputationM.PWS Publishing company,19974/glossary/page.php/Carmichae
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关注行业发展热点的2025年市场营销理论考试试题及答案
- 2025年医学专业执业考试试卷及答案
- 2025年心理测量与评估方法综合考核试题及答案
- 2025年现代艺术与文化创新的考试试题及答案
- 2025年心理咨询师资格考试试卷及答案
- 2025年水资源管理与保护课程考试卷及答案
- 2025年人工智能与机器学习基础试卷及答案
- 北师大版(2024)七年级下册英语期末复习:Unit1~6语法练习100题(含答案)
- 2025年建筑设计基础知识测试卷及答案
- 2025年建筑经济与管理综合能力考试试卷及答案
- 国开学习网《小企业管理基础》形考任务1-4答案
- 2024年湖北武汉市法院系统雇员制审判辅助人员招聘245人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024年安徽省农业信贷融资担保有限公司招聘笔试参考题库附带答案详解
- 《新能源汽车动力电池及管理系统检修》 课件 模块1 新能源汽车动力电池及管理系统认知
- 地方病防治课件
- 住院医师规范化培训急诊科出科理论考核A卷
- 供应商稽核查检表
- 免疫检验 免疫应答之 非特异性免疫
- GB/T 20490-2023钢管无损检测无缝和焊接钢管分层缺欠的自动超声检测
- 生活中的化学知识课件
- 利用“智慧教育平台”激活农村学校教育智慧
评论
0/150
提交评论