从程序中删除不需要的文本

时间:2012-07-02 04:13:10

标签: java

你能帮忙“解决”这个程序吗? 我有它几乎完美,但当我打印它包括“28”,我不想要。

public static boolean isPerfectNumber(int n)
{
    int lhs=0,rhs = 0;
    for(int i = 1;i<(n-2);i++)
    {
        lhs += i * (n/i)                                                                   ;
        rhs += i * ((n-1)/i)                                                               ;
    }

    rhs += n;
    if(rhs == lhs)
    {
        return true                                                                        ;
    }
    return false                                                                       ;
}


public static void main(String[] theory) {
    int candArray[] = new int [20]                                                 ;
    for(int i = 2;i<21;i++)
    {
        candArray[i-2] = (int) (Math.pow(2, i-1)*(Math.pow(2, i)-1)                   );
    }

    for(int i = 1;i<20;i++){
        if(isPerfectNumber(candArray[i])                                              )
        {
            System.out.println(candArray[i] + " is a perfectNumber"                       );
        }
    }
}

2 个答案:

答案 0 :(得分:3)

现在您正在使用Mersenne Primes查找perfect numbers。根据您填充Mersenne Primes阵列的方式,包括与28相关联的Mersenne Prime。 Mersenne Primes的形式为(2 ^ p - 1),main中的第一个循环将Mersenne Primes存储在数组中。

你需要弄明白:

  • 哪个Mersenne Prime与完整号码28相关联?
  • 现在你应该如何更改第一个循环中的索引 - 你的第二个循环 - 在main中忽略与28相关联的Mersenne Prime?

答案 1 :(得分:1)

最快&amp;最简单的改变:

if(isPerfectNumber(candArray[i]) && candArray[i] > 28 )
{
   System.out.println(candArray[i] + " is a perfectNumber" );
}