【討論】如何證明為質數


Recommended Posts

平時我們要證明一個數是質數,我們可以從2.3.5.7....等一一檢驗

例如103不是2.3.5.7的倍數,則為一質數

不過我想問的是,萬一此數很大呢?

例如

614889782588491411

總不可能從2.3.5.7...一一去驗證吧,那樣太花時間了

是否有什麼方法可以在短時間內證明此數為一質數?

鏈接文章
分享到其他網站
我記得有個方法...

就是找他平方根最近的數字的因數一一找尋

例如231 離他最近的平方數是225 從1~15的質數一一下去找...

我不知道我講的是不會完全正確= = 有點忘記的話 請見諒

我前面舉的103的例子就是你說的那個方法

不過當數字很大的時候,用這個方法會花很多時間吧@@

所以我想問的是是否有其他更快的方法能檢定很大的數字是否為質數

鏈接文章
分享到其他網站

(以後也不一定會有)

要電腦把兩個100位的質數乘起來,不到1秒鐘的事

但是要把這個乘積給電腦質因數分解,電腦所做的事跟我們做的是一樣的----

從2開始的質數一個一個檢驗,所以乘法公式和因式分解這兩個互逆的操作電腦花的時間可是大不相同!

要把一個200位的數分成兩個100位的質數乘積超級電腦也要費上好幾(十?)年工夫的.

不然以現在一些質數檢驗網站為例,你打的數字越大,就可明顯感受到操作時間變長.

你打個幾百億的數字近去包准他當機給你看.

如果同學們能找出更好的方法保證是數學界最偉大的成就之一 ^^|||

鏈接文章
分享到其他網站

sor我把例子的數字改一下= =a

其實我舉的例子是要舉質數(雖然我不曉得現在改的這個是不是質數)

我想了一個質數輾轉檢驗法,不過只是構想,實際上我不曉得是否所有的數皆能成立

我先列出100以前的質數

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

然後按順序相乘

2x3=6

2x3x5=30

2x3x5x7=210

2x3x5x7x11=2310

2x3x5x7x11x13x17=39270

.

.

.

.

2x3x5x7x11x13x17x19x23x29x31x37x41x43x47=614889782588491410

先以2311為例子

如果我們要檢驗2311是否為質數

則用上表找出最接近且小於2311的數來跟2311作輾轉相除法

得結果其最大公因數為1,則可知2311無法被2,3,5,7,11整除

由此類推我舉的例子

614889782588491411跟614889782588491410作輾轉相除

不過這和篩法似乎有矛盾,因為篩法是要以比其數平方根小的整數一一檢定

而2311只檢定到了2,3,5,7,11

若嚴謹一點則應該用2x3x5x7x11x13x17x19x23=223092870來做輾轉相除才對

而且用這方法要查表

我想這方法的出發點是用手算,完全沒考慮到計算機xd

第一次打到一半不小心把網頁關了T^T,這次打的可能看起來會比較簡略

鏈接文章
分享到其他網站

注意!!!!!!這個「篩法」只是看起來合理而已,但完全不是這麼一回事。注意到了嗎?最接近的那一項根本不代表表內質數連乘積和他有相同的質因數啊。

例如說2*3*5*7*11*13=30030 現在找一個數 3^6*41=29889 那個41根本是前面沒出現過的

高斯(或是歐拉,反正兩者都是心算超強的怪才),空閒時間的娛樂是找出所有「千數」(例如13000~14000)當中的所有質數,他的方法當然不是一個一個的篩,而是利用自己導出的,數論中的強大公式(對我們門外漢來講是天書的,例如費馬小定理),一次把範圍縮小到--我也不知道--幾十個數吧。

但是我想,他的方法八成失傳了,因為對天才數學家他們來說這些只不過是雕蟲小技......

讀了關於數論的科普書之後的心得

鏈接文章
分享到其他網站
sor我把例子的數字改一下= =a

其實我舉的例子是要舉質數(雖然我不曉得現在改的這個是不是質數)

我想了一個質數輾轉檢驗法,不過只是構想,實際上我不曉得是否所有的數皆能成立

我先列出100以前的質數

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

然後按順序相乘

2x3=6

2x3x5=30

2x3x5x7=210

2x3x5x7x11=2310

2x3x5x7x11x13x17=39270

.

.

.

.

2x3x5x7x11x13x17x19x23x29x31x37x41x43x47=614889782588491410

先以2311為例子

如果我們要檢驗2311是否為質數

則用上表找出最接近且小於2311的數來跟2311作輾轉相除法

得結果其最大公因數為1,則可知2311無法被2,3,5,7,11整除

由此類推我舉的例子

614889782588491411跟614889782588491410作輾轉相除

不過這和篩法似乎有矛盾,因為篩法是要以比其數平方根小的整數一一檢定

而2311只檢定到了2,3,5,7,11

若嚴謹一點則應該用2x3x5x7x11x13x17x19x23=223092870來做輾轉相除才對

而且用這方法要查表

我想這方法的出發點是用手算,完全沒考慮到計算機xd

第一次打到一半不小心把網頁關了T^T,這次打的可能看起來會比較簡略

我覺得這樣能證明的也只是614889782588491411跟614889782588491410互質吧

並沒有證明614889782588491411是個質數

鏈接文章
分享到其他網站
我覺得這樣能證明的也只是614889782588491411跟614889782588491410互質吧

並沒有證明614889782588491411是個質數

我是想說

2x3x5x7x11x13x17x19x23x29x31x37x41x43x47=614889782588491410

那麼和他互質的數必不為2,3,5,7,11,13,17,19,23,29,31,37,41,43,47的倍數

若有一數的平方根之最接近的比他小之數為47

例如2301(純舉例,非質數),本來用篩法的話是要從2,3,5,......,43,47一一檢定

但若直接和614889782588491410作輾轉相除便可以一次做完篩法

鏈接文章
分享到其他網站
  • 2 weeks later...

想法本身是沒有錯的

但是這樣子電腦運算會有限制

以篩法來說,最高位數就是要檢驗的質數

但是你的做法是一大串數相乘

以我所知最大的質數

2^32582657-1來說

它有9808358位

小於他的全部質數相乘

根據質數定理

小於n的質數個數p(n)

在n很大時

0.92129(n / ln n)< p(n) <1.10555(n / ln n)

n=e^22584576代入(約等於2^32582657-1)

p(n)大約10^8

炸掉了

鏈接文章
分享到其他網站
以下假設加減乘除運算極快:

設待測數為p

利用Wilson定理,將(p-1)!對p取餘數,若餘數為-1,則此數為質數

如果運算極快,可能用篩法還要更快些!:s

鏈接文章
分享到其他網站
平時我們要證明一個數是質數,我們可以從2.3.5.7....等一一檢驗

例如103不是2.3.5.7的倍數,則為一質數

不過我想問的是,萬一此數很大呢?

例如

614889782588491411

總不可能從2.3.5.7...一一去驗證吧,那樣太花時間了

是否有什麼方法可以在短時間內證明此數為一質數?

如果你找到了什麼很快的方法,就算沒有得fields medal,大概也離數學大師不遠了!:)

鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入