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;
}
}
4

2 回答 2

2

制作

testNum%2 != 2

作为

testNum%2 != 0
于 2013-10-30T03:48:21.720 回答
0
testNum=3
while (testNum != sum_of_divisors(testNum) && testNum%2 != 2)
    testNum++;

您可能想做 'testNum+=2' 因为您只关心奇数并将 testNum %2!=2 替换为 testNum>0 或其他停止条件。最终你的整数会溢出。

“我的教授想让我把它们结合起来,看看是否有一个奇完美数。我知道没有一个(已知的),但我需要实际编写代码来证明这一点。”

你的意思是在 3 和 2^32-1 之间?不知道没有奇完美数。

于 2013-10-30T04:40:15.953 回答