2017-09-02 50 views
3

所以我的程序所做的是讀取用戶輸入並打印出一系列導致輸入的素數。因此,例如,如果我輸入20的順序應打印出 7等。 ,直到它達到19(因爲20不是質數) 唯一的問題是,當我運行程序1保持打印出來。這裏是我的方法來確定數字是否爲素數。素數序列Java

public boolean isPrime(int number) 
{ 
    int prime; 
    for(prime = 2; prime < number; prime++) 
    { 
     if (number % prime == 0) 
     { 
      if(number == 1) 
      { 
       return false; 
      } 
     return false; 
     } 
    } 
    return true; 
} 

我已閱讀多個論壇和解決方案,似乎沒有幫助。我完全卡住了。

+0

它沒有找到素數 – nagendra547

回答

0

number1(您的循環將從2開始)時,您的循環從不輸入。在循環之前移動測試,並且在循環之後永遠不會使用prime - 所以我會將它放在循環的本地。

public boolean isPrime(int number) 
{ 
    if (number == 1) 
    { 
     return false; 
    } 
    for (int prime = 2; prime < number; prime++) 
    { 
     if (number % prime == 0) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

你可以優化事情有點雖然,例如 - 消除所有值小於2(爲@luk2302建議)和一點點數學消除偶數值,只測試多達平方根。

public boolean isPrime(int number) { 
    if (number < 2) { 
     return false; 
    } else if (number == 2 || number == 3) { 
     return true; 
    } else if (number % 2 == 0) { 
     return false; 
    } 
    double sq = Math.sqrt(number); 
    for (int prime = 3; prime <= sq; prime += 2) { 
     if (number % prime == 0) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

喜的優化的方式!這使它的工作,但我不完全明白這是否如果(數字== 2 ||數字== 3){ 返回true; – xiomy528

+0

@ xiomy528 2和3都是主要的,下一個測試是對其他任何事情都是偶數,然後循環檢查大於3的值。 –

1

if (number < 2) return false;

作爲第一個語句到你的方法應該做的伎倆。

0

這是找到1到n之間素數的簡單方法。 希望它很清楚。

int n=20; 
System.out.println("All Prime Numbers Between 1 to "+n); 
boolean isPrime; 

for (int i = 2; i <= n; i++) { 
    isPrime = true; 
    for (int j = 2; j <=Math.sqrt(i); j++) { 
     if (i % j == 0) { 
      isPrime = false; 
      break; 
     } 
    } 

    if (isPrime) 
     System.out.print(i + " "); 
} 

Ouput-

All Prime Numbers Between 1 to 20 
2 3 5 7 11 13 17 19