你能帮忙“解决”这个程序吗? 我有它几乎完美,但当我打印它包括“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" );
}
}
}
答案 0 :(得分:3)
现在您正在使用Mersenne Primes查找perfect numbers。根据您填充Mersenne Primes阵列的方式,包括与28
相关联的Mersenne Prime。 Mersenne Primes的形式为(2 ^ p - 1),main
中的第一个循环将Mersenne Primes存储在数组中。
你需要弄明白:
28
相关联?main
中忽略与28
相关联的Mersenne Prime?答案 1 :(得分:1)
最快&amp;最简单的改变:
if(isPerfectNumber(candArray[i]) && candArray[i] > 28 )
{
System.out.println(candArray[i] + " is a perfectNumber" );
}