首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 找出 1000 以內的所有完全數

     編輯:Java 相關知識

完全數尋找演算法實作

完全數又稱完美數,指該數等於其所有真因數(不含自身)之和。例如 6 = 1+2+3,28 = 1+2+4+7+14。本文提供兩種 Java 實作並分析效能。

方法一:暴力法(適合教學)

public class PerfectNumberBruteForce {
    public static void main(String[] args) {
        System.out.print("1000 以內的完全數:");
        for (int i = 2; i <= 1000; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if (i % j == 0) sum += j;
            }
            if (sum == i) System.out.print(i + " ");
        }
        System.out.println();
    }
}

方法二:優化至 √n(效能大幅提升)

public class PerfectNumberOptimized {
    public static void main(String[] args) {
        for (int i = 2; i <= 1000; i++) {
            int sum = 1; // 1 是所有數的因數
            for (int j = 2; j * j <= i; j++) {
                if (i % j == 0) {
                    sum += j;
                    int pair = i / j;
                    if (pair != j) sum += pair; // 避免平方數重複加
                }
            }
            if (sum == i) System.out.println(i + " 是完全數");
        }
    }
}

1000 以內結果

6, 28, 496

數學背景補充

  • 所有偶數完全數對應梅森質數:2^(p-1) * (2^p - 1),其中 2^p - 1 為質數。
  • 目前未發現奇數完全數,但也未證明不存在。
  • 已知前幾個完全數:6, 28, 496, 8128, 33550336...

效能比較

方法時間複雜度1000 以內耗時
暴力雙層迴圈O(n²)~2ms
優化至 √nO(n√n)~0.3ms
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved