Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบ Trojan Number ใน Python

ภาพรวม

Trojan Number = Strong Number (ทุกเฉพาะ因數ปรากฏ ≥ 2 ครั้ง) ที่ไม่ใช่ Perfect Power

Strong ≈ Powerful แต่เน้นที่ความถี่ของ prime factors

ตัวอย่าง

72 = 2³ × 3²

  • Strong: 2 ปรากฏ 3 ครั้ง, 3 ปรากฏ 2 ครั้ง ✓
  • Perfect Power: 72 ไม่ใช่ aᵇ ✓
  • → True

โค้ด Python

from math import sqrt

def check_perfect_pow(n):
    if n == 1:
        return True
    for x in range(2, int(sqrt(n)) + 1):
        y = 2
        p = x ** y
        while p <= n and p > 0:
            if p == n:
                return True
            y += 1
            p = x ** y
    return False

def check_strong_num(n):
    count = {i: 0 for i in range(n + 1)}
    while n % 2 == 0:
        n //= 2
        count[2] += 1
    for i in range(3, int(sqrt(n)) + 1, 2):
        while n % i == 0:
            n //= i
            count[i] += 1
    if n > 2:
        count[n] += 1
    for v in count.values():
        if v == 1:
            return False
    return True

def isTrojan(n):
    return not check_perfect_pow(n) and check_strong_num(n)

print(isTrojan(72))

Trojan Numbers เริ่มต้น

72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125...

(เหมือน Achilles Numbers ทุกตัว)

ผลลัพธ์

True