2011-03-12 34 views
1

可能重複:
C - determine if a number is primeC - 如果它是素數,如何輕鬆測試?

有沒有辦法在C容易地測試所選擇的號碼是否是素數或不?

+0

[Duplicate 1](http://stackoverflow.com/questions/4541415/haskell-prime-test)&[Duplicate 2](http://stackoverflow.com/questions/2586596/fastest-algorithm-for- primality-test)&[Duplicate 3](http://stackoverflow.com/questions/3755789/fastest-prime-test-for-small-ish-numbers) – 2011-03-12 09:49:17

+0

另請參見:http://en.wikipedia.org/ wiki/Prime_Number #Test_primality_and_integer_factorization – 2011-03-12 09:51:51

+0

我將它標記爲重複。 – vissi 2011-03-12 09:53:03

回答

10

最簡單的方法是寫一個循環,如:

int is_prime(int num) 
{ 
    if (num <= 1) return 0; 
    if (num % 2 == 0 && num > 2) return 0; 
    for(int i = 3; i < num/2; i+= 2) 
    { 
     if (num % i == 0) 
      return 0; 
    } 
    return 1; 
} 

然後,您可以優化它,迭代到floor(sqrt(num))

+0

循環*像*那麼,但是最好不要測試0或1作爲因子; -p – 2011-03-12 09:57:05

+0

你可以進一步優化,首先檢查'num%2',然後從3開始並增加2,因爲你已經消除了所有的偶數。 – Lazarus 2011-03-12 09:57:38

+0

謝謝,我修復了代碼。 – vissi 2011-03-12 10:32:01

3

最快的方法是預先計算了一下陣列(表示黃金/非高峯)在你感興趣的範圍內的所有可能的整數。對於32位無符號整數,這是隻有512M,這將很容易適應現代的地址空間(即使沒有,它也會快速查找文件)。

這幾乎肯定會比每次都通過篩子計算得更快。

相關問題