2013-10-03 58 views
1

我想有一個程序,顯示出特定範圍,並顯示「無素」的範圍只有一次,如果有在上述範圍內,如24無質數到28Java程序顯示的素數

int count=0; 

for(prime = lowerLimit ;prime < upperLimit; prime++) 
{ 
    count=0;     
    for(divisor = 2; divisor <prime; divisor++) 

     { 
      if(prime % divisor== 0)        

         count++; 

    } 

if(count==0) 
System.out.println(prime); 
} 

if (count>0) 
System.out.println("nope"); 

我有試圖把

if (count>0) 
System.out.println("nope"); 

外循環,但它也打印時,範圍有質數。 我該如何解決它?

+1

你不需要運行你的內部循環,直到除數 nitgeek

回答

2

保留一個額外的變量,如noOfPrime,它將計算一定範圍內素數的數量。如果找到任何素數,則增加1,這樣在循環的外側可以確定數字素數以及是否存在素數。

int count = 0; 
int noOfPrime = 0; 
... 
for(prime = lowerLimit ;prime < upperLimit; prime++){ 
    ... 
    if(count==0){ 
     System.out.println(prime); 
     noOfPrime+=1; 
    } 
} 
if(noOfPrime >0) 
    System.out.println("no primes); 
0

每當你到達外部循環的末尾,count仍然是0,這意味着你已經找到了一個素數。所以如果這種情況發生一次,那麼你最後會打印「nope」,而不是而不是。使用boolean變量來跟蹤您是否看過素數。既然這是作業,我會讓你弄清楚如何使用它。提示:在兩個循環上面聲​​明boolean

2

首先,您的檢測素數的方法是可怕的。它可以工作,但速度很慢。如果你想改善內部循環,我建議你考慮使用篩子。

其次,你究竟在計算什麼?現在,您的計數變量存儲一個數字所具有的除數的數量,然後在檢查下一個數字時將其設置爲零。那麼如何告訴你關於你在一定範圍內有多少素數?你可以做這樣的事情:

notPrime = false; 
for(prime = lowerLimit ;prime < upperLimit; prime++) 
{      
    for(divisor = 2; divisor <prime; divisor++) 
    { 
     if(prime % divisor== 0){ 
      notPrime = true; 
      break; 
    } 
    if(notPrime) 
     break; 
} 

if(notPrime) System.out.println("There's a prime"); 
+0

你不需要運行你的內部循環直到divisor nitgeek

+0

我剛剛複製了他的內部循環。如果我實際上正在實施一個主要號碼查找器,那麼我會使用我在第一段中提到的篩子。 –

2

你可以設計一個函數來確定一個數是否爲素數一樣的東西:

//checks whether an int is prime or not. 

boolean isPrime(int n) { 
    //check if n is a multiple of 2 
    if (n%2==0) return false; 
    //if not, then just check the odds 
    for(int i=3;i*i<=n;i+=2) { 
     if(n%i==0) 
      return false; 
    } 
    return true; 
} 

,並在for循環內,調用函數的每個元素的間隔:

for(int i=lowerLimit;i<=upperLimit;i++){  
    if (!(isPrime(i))){ 
    System.out.println("nope"); 
    break; 
    } 
} 

對不起,如果我有一些語法錯誤,我從手機回覆。