2012-05-12 3 views
1

저는 이것이 소수 나 소수를 찾기위한 최선의 방법이 아니라는 것을 알고 있습니다. 그러나, 169가 소수로 간주되는 이유를 찾지 못하는 것 같습니다. (더 작은 숫자의 경우에는 제가 걱정할만큼 괜찮습니다).이 코드의 문제점은 무엇입니까? Prime Numbers

public static int checkPrime(int num, int i) 
{ 
    if (i == num) 
     return 1; 

    else 
    { 
     if (num % i == 0) 
      return 0; 
     else 
      checkPrime(num, i+1); 

    } 

    return 1; 
} 

메인 클래스 :

 System.out.println("Type a number"); 
     number = reader.nextInt(); 

     if ((number % 10) % 2 == 0) 
      result = 0; 

     else 
      result = checkPrime(number, 2); 

     if (result == 1 || number == 2) 
      System.out.println(number + " is a prime number"); 
     else 
      System.out.println(number + " is NOT a prime number"); 
+2

왜 'bool'대신 'int'를 반환합니까? – CodesInChaos

+7

또한 재귀 호출의 반환 값을 무시합니다. – CodesInChaos

+0

소수를 소수점으로 검사하는 경우 왜 다른 사람을 확인합니까? 'if (number % divider == 0) ... '라고 말하십시오. – MikkoP

답변

6

더 나은 표현을 위해 boolean에 의해 int을 교체하고, 재귀 호출의 값을 반환, 당신의 방법은 다음과 같습니다

public static boolean checkPrime(int num, int i) 
{ 
    if (i == num) 
     return true;  
    else 
    { 
     if (num % i == 0) 
      return false; 
     else 
      return checkPrime(num, i+1); 
    } 
} 

그것은 여전히 ​​아무튼 num < 2에 대해 작업하지 않으면 i 오버 플로우 될 때까지 실행됩니다.

public static boolean checkPrime(int num) 
{ 
    if(num<2) 
    return false; 
    else 
    return checkPrime(num, 2); 
} 

BTW (number % 10) % 2number % 2에 해당 : 그래서 당신의 주요 주요 검사 함수로 당신이 뭔가를 쓸 수 있습니다.

+0

+1 2 초 정도 걸립니다. – Bohemian

+0

답장을 보내 주셔서 감사합니다. p – amiregelz

+1

참고로 Java에서는 '부울입니다.' – st0le

관련 문제