2012-07-02 25 views
-3

您可以幫助「刪除」該程序。 我有它幾乎完美,但是當我打印它包括「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

你能確切地解釋(更清晰)你** **不想要? – ZnArK

+0

當我運行程序時,它打印出「28是一個完美的數字」。我希望除了28之外的一切都是完美的數字。 – Fruitytart

+2

28是一個完美的數字。你爲什麼不希望它被打印? – dlev

回答

1

最快&簡單的變化:

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

這只是一個破解。 – dantuch

3

您現在使用的Mersenne Primes找到perfect numbers。根據您填充梅森素數列的方式,包含與28相關聯的Mersenne Prime。梅森素數的形式是(2^p-1),你在main的第一個循環是將Mersenne Primes存儲在一個數組中。

你需要弄清楚:

  • 哪個梅森素數與完美的數字28關聯?
  • 現在應如何更改第一個循環中的索引 - 您的第二個循環 - 在main中省略與28關聯的Mersenne Prime?
相關問題