匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 1 0 年前

寫一個”perfect number”JAVA程式!急

題目:

An integer number is said to be a perfect number if its factors , including 1(but not the number itself) , sum to the number. For example, 6 is a perfect number, because 6=1+2+3. Please write a JAVA application or applet to determine whether a given nonnegative integer n is a perfect number or not. If the number is not less than 1,000 ,

display an error message and allow the user to enter a new integer.

可以麻煩給我完整的JAVA程式碼嗎?(要能在NetBeans IDE軟體下跑) 謝謝

已更新項目:

真是謝謝你提供那麼多

不好意思!再麻煩一下

因為我的NetBeans IDE壞了

只能使用JCreator

那我需要再改哪些程式碼

1 個解答

評分
  • Jeremy
    Lv 4
    1 0 年前
    最佳解答

    其他相似練習題可以參考

    ACM:perfect/abundant/deficient.

    http://acm.uva.es/p/v3/382.html

    2006-06-02 21:55:14 補充:

    if you have any questions, please contact me.

    E-mail: tsungjung411@yahoo.com.tw

    ---------------------------------------------------------

    程式下載觀摩:

    http://home.kimo.com.tw/tsungjung411/download/java...

    一個正整數,若其所有因數(包含1但不含括本身)加總起來等於該數本身,則稱為完全數(perfect number)。例如:6是一個完全數,因為它的因數有1, 2, 3, 6,滿足1+2+3=6,又如28也是一個完全數,因為它的因數有1, 2, 4, 7, 14, 28,滿足1+2+4+7+14=28。請寫一個JAVA應用程式或Applet程式來決定一個給定的非負整數n是否是一個完全數。所給定的數將不會超過1000,並且程式能顯示錯誤訊息以及能讓使用者輸入一個新整數。

    說明:

    在這裡提供兩個演算法,

    一為較簡單,但效率不高,時間複雜度為O(n).

    另一為稍難些,但效率高,時間複雜度為O(n^0.5)

    (1)較簡單的演算法

    採循序測試,

    factor從1測試到n-1,判斷factor是否是n的因數

    若是,則sum+=factor。

    在這演算法中,使用了n個取餘數運算(%),及至少n個以上的加法運算。

    程式碼如下:

     public static boolean isPerfectNumber2(long n) {

      long factor, sum;

      

      for ( factor = 1, sum = 0; factor < n; factor++) {

       if (n % factor != 0) {

        continue; //n = factor1 * factor2, continue to find next factor

       }

       sum += factor;

      }

      

      if (sum == n) {

       return true;

      }

      return false;

     }

    (2)稍難些的演算法

    採循序測試,並且對稱相加,

    factor從1測試到約略√n,判斷factor是否是n的因數

    若是,則sum+=factor + n/factor。

    例如:28的因數有1, 2, 4, 7, 14, 28,則

    Sum += 1 + 28

    Sum += 2 + 14

    Sum += 4 + 7

    最後再將sum扣除28 ( not include the number itself )

    在這演算法中,約略使用了√n個取餘數運算(%),及至多√n個除法與加法運算。

    程式碼如下:

     public static boolean isPerfectNumber1(long n) {

      long factor1 = 1, factor2;

      long sum = 0;

      

      while (factor1 < n) {

       if (n % factor1 == 0) {

        factor2 = n / factor1;

        if (factor1 < factor2) {

         sum += factor1 + factor2;

        } else if (factor1 == factor2) {

         sum += factor1; //ex. the factors of 4(=2*2) are 1, 2 and 4.

        } else {

         break;

        }

       }

       factor1++;//n = factor1 * factor2, continue to find next factor1

      }

      //but not include n itself

      if (sum - n == n) {

       return true;

      }

      return false;

     }

    執行結果:

    Please input a positive integer n (typing -1 will exit)

    n = 496

    The 496 is a perfect number.

    496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248

    Please input a positive integer n (typing -1 will exit)

    n = 1000

    The 1000 is not a perfect number.

    Please input a positive integer n (typing -1 will exit)

    n = -1

    Press any key to continue...

    (p.s. 翻譯可能翻的不太好...)

    2006-06-02 22:01:53 補充:

    效能測試 n = 1 to 10000:

    (1)稍難些的演算法

    Is 6 a perfect number? True.

    Is 28 a perfect number? True.

    Is 496 a perfect number? True.

    Is 8128 a perfect number? True.

    It takes 187(ms)

    2006-06-02 22:01:59 補充:

    (2)較簡單的演算法

    Is 6 a perfect number? True.

    Is 28 a perfect number? True.

    Is 496 a perfect number? True.

    Is 8128 a perfect number? True.

    It takes 1157(ms)

    2006-06-03 14:23:54 補充:

    Write once, run anywhere!

    JAVA 的宗旨,也就是跨平台的特性,不須在針對不同平台撰寫不同原始碼!

    => 所以不需要變改原始碼!

    p.s. 我也是在JCreator環境下撰寫~

    參考資料: me
還有問題?馬上發問,尋求解答。