首页
社区
课程
招聘
[分享]如何迅速檢驗質數?
发表于: 2009-5-16 16:57 8034

[分享]如何迅速檢驗質數?

2009-5-16 16:57
8034
※ 以下內容,是我在 Yahoo 奇摩知識家所評論的一篇文章 ※
轉載內容來自 http://tw.knowledge.yahoo.com/question/article?qid=1708102606874
評論對象: 如何迅速檢驗質數?

Agrawal-Kayal-Saxena 演算法:
紐約時報(New York Times)於 2002年8月8日報導了,『新的方法解開了數學的關鍵問題』,即印度科技學院的 Manindra Agrawal、Neeraj Kayal、Nitin Saxena 師徒三人提出一個能在多項士時間內,判斷任意正整數是否為質數的演算法[1],該演算法相當乾淨且漂亮,這個結果轟動了數學界與資訊界。對於數學界而言,自從高斯以來,判斷一整數是否為質數,本來就是許多數學家所關心的問題;對於資訊界而言,由於大多數的Publick Key Cryptosystem 需要質數,而且是大質數,一個真正能在適當時間內,找到真正質數的 deterministic 演算法,為關鍵性問題。這樣的演算法實用價值不可言喻。曾經是1997年國際數學奧林匹亞競賽印度代表隊的隊員 Kayal 與 Saxena選擇了資訊系就讀,並參加Agrawal 帶領下的學生專題計畫,並在2002年夏天,開始了博士生研究,在6月10日,他們的研究達到突破性進展。他們找出對質數羃次的重要刻劃。

值的一題的是,證明是用一般基礎數論的結果,如費馬小定理等,對於有代數以及基礎數論知識的人而言,要理解該定理的證明並非難事,[2]將該結果整理一下,就可以得到下列判斷質數的演算法。

(Agrawal-Kayal-Saxena 演算法)

輸入一正整數 n > 1,並判斷其是否為質數。
bool Agrawal_Kayal_Saxena(biginteger n) // n > 1 整數

{

Step 1:  if (is Power(n))   // 若 n =a^b ,其中 b > 1

                     return 0;  // n為某數羃次,非質數

Step 2: r = min{r| ord(n, Z/r) > 4 * (log (n)^2)};

                                     // ord(n,Z/r) 表 n 在乘法群 Z/r 之秩

              for (a=2;a<=r;a++)

                  { 
                         ***=***(a,n);

                         if (***>1 && *** < n)

                         return 0; // n 為合成數,非質數
                   };

             s=floor(2*sqr (Eulerphi(r)) * log(n));

step 3: for(a=1;a<=s;a++)

                    if((x+a)^n!=x^n+a(mod x^r-1,n))

                    return 0; // n 為合成數,非質數

          return 1;  // n 為值數 
}
演算法內容節錄自[3]。
[1] Agrawal M., Kayal N. and Saxena N., 'PRIMES is in P', Preprint of Aug., 2002, http://www.cse.iitk.ac.in/news/primality.html
[2] Bornemann F., 'PRIMES Is in P: A Breakthrouth for Everyman', Notices of the AMS, May 2003.
[3] 鄧安文 編著,密碼學--加密演算法與密碼分析,全華科技圖書出版,2004年。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 138
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章,不过如果在前面写些数学知识的话就更好了
2010-5-29 12:46
0
游客
登录 | 注册 方可回帖
返回
//