2016-10-06 2 views
0
package pureTest; 
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class test3 {  
     public static void main(String[] args) { 
      /* Enter your code here. */ 
      Scanner sc = new Scanner(System.in); 
      int n = sc.nextInt(); 
      for (int i = 2; i< n; i++){ 
       if(n <= 3){ 
        System.out.println("Prime"); 
        break; 
       }else if(n%i ==0){ 
        System.out.println("Not Prime"); 
        break; 
       }else{ 
        System.out.println("Prime"); 
       } 
      } 

      } 
     } 

입력 7; 출력은 Prime의 반복입니다.소수를 검사하는 루프

7 
Prime 
Prime 
Prime 
Prime 
Prime 

여기서 if 조건이 작동하지 않는 이유가 궁금합니다.

+1

이것은 잘 작동합니다. 여분의 프라임은 다른 부품으로 인해 발생합니다. – Gaur93

+0

예상되는 출력은 무엇입니까? – Jens

+0

그냥 다른 부분에 중단을 추가하십시오. } else { System.out.println ("Prime"); 중단; } – Karthik

답변

1

코드가 주요 인쇄 할 수는 약수를 찾을 때까지! 또한

for (int i = 2; i< n; i++){ 
      if(n <= 3){ 
       System.out.println("Prime"); 
       break; 
      }else if(n%i ==0){ 
       System.out.println("Not Prime"); 
       break; 
      }else{ 
       System.out.println("Prime"); --> this line will be printed every time in your loop! 
      } 
     } 

당신이 N/2 분할 N

확인이 코드 :-) 수있는 수 없을 것이다 이후로, N까지 반복 할 필요가 없습니다 ...

private static boolean checkPrime(int n) { 
    int i = 2; 
    while(i<=n/2){ 
     if(n%i++ == 0){ 
      return false; 
     } 
    } 
    return true; 
} 
1

귀하의 else 절이 잘못되었습니다. ni으로 나눌 수 없을 때마다 "Prime"을 인쇄합니다. 비 프라임 입력에 대해서도 prime을 인쇄합니다 (예 : 21 % 2! = 0이므로 "프라임하지 않음"을 인쇄하기 전에 "Prime"을 21로 인쇄합니다). 당신은 단순히 위의 확인이다 main 기능에 확인하려면

 for (int i = 2; i < n; i++) { 
      if(n <= 3){ 
       System.out.println("Prime"); 
       return; 
      } else if(n%i == 0){ 
       System.out.println("Not Prime"); 
       return; 
      } 
     } 
     System.out.println("Prime"); 
0
public static void main(String[] args) { 
     /* Enter your code here. */ 
     Scanner sc = new Scanner(System.in); 
     int n = sc.nextInt(); 
     boolean isPrime = true; 
     for (int i = 2; i< n; i++){ 
      if(n <= 3){ 
       break; 
      }else if(n%i ==0){ 
       System.out.println("Not Prime"); 
       break; 
      } 
     } 
     if (isPrime) { 
      System.out.println("Prime"); 
     } else { 
      System.out.println("Not prime"); 
     } 
     } 

:

처럼 뭔가에 루프를 변경

. 당신이하고 싶은 경우도 다음을 시도하십시오

public static void main() { 
    Scanner sc = new Scanner(System.in); 
    int n = sc.nextInt(); 
    if (isPrime(n)) { 
     System.out.println("Prime"); 
    } else { 
     System.out.println("Not prime"); 
    } 
} 

boolean isPrime(int n) { 
    if (n < 2) { 
     return false; 
    if (n == 2) 
     return true; 
    if (n%2 == 0) 
     return false; 
    for (int i = 3; i*i<=n; i+=2){ 
     if (n%i == 0) 
      return false 
    return true; 
} 
0
boolean isPrime = true; 
    Scanner sc = new Scanner(System.in); 
int n = sc.nextInt(); 
    for (int i = 2; i< n; i++){ 
     if(n%i==0) { 
      System.out.println("Not Prime"); 
      isPrime=false; 
      break; 
     } 
    } 

    if(isPrime) { 
     System.out.println("Prime"); 
    } 
관련 문제