2015-06-20 80 views
-1
import java.util.Scanner; 


public class Main { 

public static void main (String[] args) 
{  
    int value;  
    int check = 2; 
    boolean flag = true; 

    Scanner input = new Scanner(System.in); 
    System.out.println("Number of times:"); 
    value = input.nextInt(); 

    for(int i = 2; i <= value;i++) 
    { 
     while(check <= i/2) 
     { 
      if(i%check == 0) 
      { 
       flag = false; 
       break; 
      } 
      check++; 
     } 
     if(flag) 
     { 
      System.out.print(i + ", "); 

     }   
    } 

} 

輸出總是打印:3的倍數和5個雖然環路誤差爲素數

程序打印2,3,5,7,9,11,13,15

我想知道爲什麼它會發生,因爲當我幹運行它,它不拿起3和5

回答

2

需要初始化checkflagi每個值,for循環中。否則,一旦找到合成號碼,它將繼續將數字視爲合成號碼。

+0

沒錯如果檢查終端是sqrt而不是i/2,那麼它也將有所幫助,但這對於正確性並不需要 –

1

使你的代碼下面的變化

for(int i = 2; i <= value;i++) 
{ 
    check = 2; flag = true; 
    while(check <= i/2) 
    { 
     if(i%check == 0) 

每個倍FR循環運行檢查的價值和標誌仍然保持其在那裏在早期迭代,因爲其中的你得到此行爲