2013-08-28 23 views
-4

我一直在想出Java中最短的代碼塊來檢查一個數是否爲素數。這是我想出來的,這是52個字符 - 不包括空格。什麼是可用於檢查素數的Java中最短的代碼?

for(int i = 2; i < n;) 
if(n % i++ == 0) 
    return false; 
return true; 

任何人都可以建議比這個更短的東西嗎?

注意:你可以假設方法頭public boolean isPrime(int n){}已經爲你寫的,n是要測試的整數。

+0

爲什麼你需要它?它是一些競爭的一部分或什麼? –

+0

你是什麼意思最短?最少字節碼?你爲什麼想做這個? –

+2

你可以通過調用另一個已經做到這一點的方法來縮短它。 –

回答

2

48,如果你被允許使用現有的API(和import語句不計):

return BigInteger.valueOf(n).isProbablePrime(9); 
0

如果最短你意味着更快的代碼,那麼你可以循環,直到開方(N)只,因爲沒有多少會有因素比數字本身的平方根更大

+0

你可以跳過所有偶數(除第一個)。 – Thilo

3

由於性能和清晰度似乎沒有關係,你不需要提前完成

boolean b = 1>0; 
for(int i = 2; i < n;) 
    b &= n % i++ != 0; 
return b; 

1>0少於true0>0false

+2

通過刪除所有新行,空格,源代碼: for(int i = 2; i 0;返回1> 0;'比 'boolean b = 1> 0; for(int i = 2; i Pawel

+1

使用'0> 0'而不是'false',如果我們忽略源代碼的可讀性:)。 – Pawel

+1

我知道這已經3年了,而且這個問題也因爲它屬於codegolfing stackexchange而被關閉了,但是它更短:'for(int i = 2; i 1;'(也許@Pawel也喜歡知道。) –

1

較短如果你正在檢查一個大素數沒有的 你可以先檢查

if(n>=5){ 
    if(n%6==1||n%6==5){ 
     for(i=2;i<=sqrt(n);i++){ 
      if(n%i==0) 
       return false 
       else return true; 
     } 
    } 
} 

這將有助於消除許多情況下,爲每一個素無> = 5形式爲6K + 1或6K-1

相關問題