본문으로 건너뛰기
🛠️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.