2010-05-27 32 views
1

我知道有許多二元運算表明,東西比如我們可以證明,如果數是兩個或別的什麼權力真正 是有一些理論或特殊的二進制方法顯示,如果號碼是主要?如何檢測的黃金

+1

這不是一個真正的編程問題。 – 2010-05-27 20:02:55

+2

@David Thornley:確定一個數是否爲素數出現在真實世界的編程問題中。我想他是問是否有某種方法來確定一個數字是否是使用按位運算的素數。 – 2010-05-27 20:05:11

回答

6

檢測一個數是否爲素數並不是很容易!

閱讀這篇關於PRIMES is in P突破性的文章:http://www.ams.org/notices/200305/fea-bornemann.pdf,讓你瞭解這個問題實際上有多艱難。

這條消息可能是一個更容易閱讀:http://members.cox.net/mathmistakes/primes.htm

總之,如果你找到一個簡單的「二元法」,你會出名!

+1

不是很容易就是輕描淡寫:P它是從一開始就困擾數學家的問題。 – ldog 2010-05-27 20:06:19

+0

@ gmatt:是! :-) – 2010-05-27 20:09:52

1

對於篩算法尋找素數的一個很好的例子,你可以查看我們這個維基百科頁面。

Sieve of Eratosthenes

一個尋找素數更有趣的方法和歐拉篩(在同一頁面底部上眼)其加速了一點。

0

2與素數的判定力量之間確實存在很大差異。
如果你看看我們的數字表示的系統: 1243 = 1×10 + 2 * 10 + 4 * 10 + 3 * 10
這是很容易確定數字可以除以10(最低位爲零)還是10的冪(所有最低位爲零並使其變爲「1」,或所有數字的總和等於1)。
同爲二進制:1243 = 1 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 1 * 2 + 0 * 2 + 1 * 2 + 1 * 2 + 0 * 2 + 1 * 2 + 1 * 2
可以檢查數字,以檢查是否數目可以除以2或者甚至是2的冪,就像基於10的數字表示一樣。

現在考慮其他數字表示系統。我猜羅馬數字應該有一些有趣的屬性還可以,但你像可能感興趣的: 1243 = 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 * 101 * 103 * 107 * 109 * 113 = 11 * 113 = [0,0,0,0,1,0,0,0,0,0 ...] 素爲基礎的
即數字被編碼爲素數的冪的乘積。 這樣的系統具有很好的性能,可以比位或小數更容易進行不同的主要相關檢查。

P.S.加權總和系統爲您提供了簡單的方法來計算總和和差異,帶有產品的系統簡化了乘法和除法。

0
bool isPrime(int number){ 

    if(number < 2) return false; 
    if(number == 2) return true; 
    if(number % 2 == 0) return false; 
    for(int i=3; (i*i)<=number; i+=2){ 
     if(number % i == 0) return false; 
    } 
    return true; 

} 

注意。如果你的輸入超過10^9,它會很慢。