當前位置:編程學習大全網 - 編程語言 - 求壹種簡單的辦法快速判定壹個正整數為素數

求壹種簡單的辦法快速判定壹個正整數為素數

既快速又簡單的除了用計算機應該沒有了,要不科學家們怎麽用了那麽多年篩選法呢?看看這個吧

印度的三位計算機專家(one Professor 馬寧德拉·阿格拉瓦 + two Bachelors 尼拉葉·卡雅爾和尼汀·薩克斯特納)震驚了數學界,他們為古老的素數判定問題找到了確定的多項式算法,而且令人始料未及的是,他們的判定方法出奇地簡單,簡單到足以讓數學家們警覺起來,啟發他們重新審視許多復雜問題的解決方法。

作為除了1和自身外沒有其他約數的正整數,數千年來素數壹直是數論的基本構件。對於如何判定壹個數是否為素數,公元前240年,希臘數學家埃拉托色尼給出了壹個壹直沿用到今天的方法——“篩選法”。該方法有其局限性,即隨著數字的增大,篩選所耗用的時間呈指數增長。如果要判定相當大的自然數,哪怕采用最先進的計算機進行運算,計算時間比宇宙年齡都要長。因此,長期以來,數學家們壹直致力於尋找的,就是在可以接受的時間內能夠完成的判定方法。

在過去的幾十年間,由於素數判定問題被引入了密碼學領域,這方面的研究工作變得倍受關註。因為當前的因特網加密程序,主要是基於大數的素因子分解相當困難這壹假定。雖然目前有壹些高速程序可以給出壹個大數是素數的概率,但它畢竟沒有徹底解決問題。

印度理工學院計算機科學與工程學系的科學家馬寧德拉·阿格拉瓦和他的兩位在校本科生尼拉葉·卡雅爾和尼汀·薩克斯特納在這方面取得了成功。

這三個人的成功主要得益於采用了嶄新的思路。其他人的著眼點往往是“這個數是否是素數”,他們卻另辟蹊徑,將問題轉化成關於待判定數的壹系列小的問題或“方程”。於是,簡單的算法誕生了,只需用13行便可寫明。阿格拉瓦解釋說:“如果某個數字使所有等式成立,那麽它就是素數;否則,便不是。”

卡爾·波默朗斯是美國新澤西州貝爾實驗室的素數問題專家,他評論說:“這是壹個漂亮的算法,我為之高興。同時,也很遺憾自己沒找到它。他們的方法很簡潔,但並不平凡。他們的工作充滿智慧。”

英國沃裏克大學的數學家和科普作家伊恩·斯圖亞特認為,這壹理論突破就其本身而言固然重要,但它給人們思路上帶來的啟發意義更加深遠。如果采用它所蘊含的換個角度、化繁為簡的思想,對於那些目前處在死胡同中的難題,科學家們也許可以找到解決辦法。

因特網安全目前還未因此受到威脅。來自英國壹個加密安全公司的本·哈德利說:“相對於原來的概率計算算法,新算法並沒有給素因子分解提供好的算法,所以這壹新突破對密碼安全行業並沒有太大的實際影響。”

但是,波默朗斯堅信新算法將使密碼學專家擔憂。他認為,既然存在簡單的素數判定算法,也就很可能存在簡單的素因子分解算法,只是我們還沒註意到罷了。

這恐怕也正是阿格拉瓦等人研究工作的真正意義所在。兩名本科生的畢業項目能產生如此重大的成果,這說明我們很可能忽略掉了更多重大數學問題的簡單解答方法。波默朗斯感慨頗深地說:“這是壹個提醒,原來我們非常容易忽略掉壹些簡單的東西。”

素數判定算法

(當且僅當n為素數時,最終輸出數才為素數)

lnput: integer n>1

1.if (n is of the form a^b, b>1)output COMPOSITE;

2.R=2

3.while (r<n) {

4. if(ged(n,r)≠1) output COMPOSITE;

5. if(r is prime)

6. let q be the largest prime factor of r-1

7. if(q≥4^r/2 logn)and (n(r-1)/q≠1(mod r))

8. break;

9. r←r+1;

10. }

11.for a=1 to 2r^1/2 logn

12. if ((x-a)^n≠(x^n-a)(mod x^r-1,n))output COMPOSITE;

13.output PRIME;

  • 上一篇:我的電腦在運行有些遊戲和程序時過會總會自動彈出“xx內存不能為read或written”的錯誤提示
  • 下一篇:MTK手機芯片介紹
  • copyright 2024編程學習大全網