2013-10-30 2 views
1

숫자가 완벽한지 확인하기 위해이 두 가지 방법을 썼습니다. 내 교수님은 이상한 완벽한 숫자가 있는지 알아보기 위해 그것들을 결합하길 원합니다. 나는 알려진 것이 없다는 것을 안다. 그러나 그것을 증명하기 위해 실제로 코드를 작성해야한다.이상한 완벽한 숫자 찾기

문제는 내 주요 방법입니다. 나는 두 가지 테스트 방법을 테스트했다. 디버깅을 시도했는데 이유는 알 수 없지만 5 번에 걸렸습니다. 여기 내 코드입니다 :

public class Lab6 
{ 
public static void main (String[]args) 
{ 
    int testNum = 3; 

    while (testNum != sum_of_divisors(testNum) && testNum%2 != 2) 
    testNum++; 

} 

public static int sum_of_divisors(int numDiv) 
{ 
    int count = 1; 
    int totalDivisors = 0; 

    while (count < numDiv) 
    if (numDiv%count == 0) 
    { 
     totalDivisors = totalDivisors + count; 
     count++; 
    } 
    else 
    count++; 

    return totalDivisors; 
} 

public static boolean is_perfect(int numPerfect) 
{ 
    int count = 1; 
    int totalPerfect = 0; 

    while (totalPerfect < numPerfect) 
    { 
    totalPerfect = totalPerfect + count; 
    count++; 
    } 
    if (numPerfect == totalPerfect) 
    return true; 
    else 
    return false; 
} 
} 
+0

"디버깅"이라고 말하면 실제로 디버거를 사용하고 있습니까? 디버거가 프로그램이 멈추는 방법을 보여 주어야합니다. – chrylis

+1

이 코드에서 is_perfect를 사용하고 있지 않습니다. –

+0

'testNum % 2'은'0' 또는'1'이고 절대로'2'입니다. – Teepeemm

답변

2

당신이 수행 할 수 있습니다

testNum%2 != 0 
+0

아, 감사합니다. – coinbird

+0

내가 궁금한 것이 있으면 어떻게 수정합니까? 어떤 모듈러스 2는 결코 2와 같지 않습니다. 어떻게 스택 오버플로가 아닌 5에서 멈출 수 있습니까? – zgc7009

+0

@ zgc7009, @CoinBird가 '5'에서 멈춘 이유가 확실하지 않습니다. 나는 그것이 사실상'6 '(홀수가 아니지만 최초의 완벽한 숫자)에 멈춘다 고 믿었다. –

0
testNum=3 
while (testNum != sum_of_divisors(testNum) && testNum%2 != 2) 
    testNum++; 

testNum%2 != 2 

만들기 '를 testNum + = 2'만 홀수 번호에 대한 우려 때문에과 testNum % 2! = 2를 testNum> 0 또는 기타 중지 조건으로 바꿉니다. 결국 정수가 오버플로됩니다.

"이상한 번호가 있으면 알아 내고 싶습니다. 알고 있지는 않지만 사실을 증명할 코드를 작성해야합니다."

3의 의미입니까 & 2^32-1입니까? 이상한 완벽한 숫자가 없다는 것은 알려져 있지 않습니다.