コンテンツへスキップ
🛠️ToolsShed

Perfect Number Checker

数が完全数、不足数、過剰数かを確認します。適因数と約数和を見つけます。

完全数を検索

既知の完全数

このツールについて

完全数は真の約数の和が自分自身に等しいという稀な数学的現象を表します。この性質は非常に優雅で、古代の数学者たちはこれを神聖と考えました。完全数は数論、素因数分解、数学的美しさの研究に深く関連しており、単なる珍奇なものではありません。完全数は2000年以上前から数学者たちを魅了してきており、その謎は今日でも続いており、数百年の探索にもかかわらず51個の例しか知られていません。

このチェッカーを使用して、任意の整数の分類を調べてください:完全数か、過剰数(約数の和がそれ自体を超える)か、不足数(約数の和が不足する)か?ツールは即座にすべての真の約数とその合計を計算し、その数の構造について完全な透明性を提供します。これは約数性の性質を学ぶ学生、数論的パターンを調査する数学者、メルセンヌ素数アルゴリズムに取り組む研究者、または数字の中に隠された算術構造に興味のある人にとって非常に価値があります。

興味深いことに、既知のすべての完全数は偶数であり、オイラーの優雅な公式に従います:2^(p−1) × (2^p − 1)(2^p − 1はメルセンヌ素数)。新しい完全数を探すことは新しいメルセンヌ素数を発見することと同等です—これはGIMPSなどのプロジェクトを通じてレクリエーション数学と最先端の計算研究を結びつける探求です。予想を検証したり、約数の性質を教えたり、または数学的構造に単に驚嘆したりしている場合でも、このツールは抽象的な数論を具体的で検証可能な結果に変換します。

よくある質問

コード実装

def get_proper_divisors(n: int) -> list[int]:
    """Get all proper divisors of n (excluding n itself)."""
    if n <= 1:
        return []
    divisors = [1]
    i = 2
    while i * i <= n:
        if n % i == 0:
            divisors.append(i)
            if i != n // i:
                divisors.append(n // i)
        i += 1
    return sorted(divisors)

def check_perfect(n: int) -> dict:
    """Check if n is perfect, deficient, or abundant."""
    if n <= 0:
        return {"error": "Must be positive"}

    divisors = get_proper_divisors(n)
    divisor_sum = sum(divisors)

    if divisor_sum == n:
        classification = "perfect"
    elif divisor_sum < n:
        classification = "deficient"
    else:
        classification = "abundant"

    return {
        "number": n,
        "divisors": divisors,
        "divisor_sum": divisor_sum,
        "is_perfect": divisor_sum == n,
        "classification": classification,
        "difference": n - divisor_sum
    }

# Known perfect numbers
perfect_numbers = [6, 28, 496, 8128, 33550336]
for p in perfect_numbers:
    r = check_perfect(p)
    print(f"{p}: {r['classification']} (divisors sum = {r['divisor_sum']})")
    print(f"  Divisors: {r['divisors']}")

# Find abundant numbers up to 100
print("\nAbundant numbers up to 100:")
abundant = [n for n in range(2, 101) if check_perfect(n)["classification"] == "abundant"]
print(abundant)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.