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

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

ภาพรวม

Achilles Number คือจำนวนที่เป็น Powerful แต่ไม่ใช่ Perfect Power

  • Powerful: ทุกเฉพาะ因數 p ของ n มี p² หาร n ลงตัว (พยัญชนะปรากฏ ≥ 2 ครั้ง)
  • Perfect Power: n = aᵇ สำหรับ a>1, b>1

ตัวอย่าง

108 = 2² × 3³

  • Powerful: 2²|108, 3²|108 ✓
  • Perfect Power: 108 ไม่ใช่ aᵇ → ✓
  • → True

โค้ด Python

from math import sqrt, log

def check_powerful(n):
    while n % 2 == 0:
        p = 0
        while n % 2 == 0:
            n //= 2
            p += 1
        if p == 1:
            return False
    for factor in range(3, int(sqrt(n)) + 1, 2):
        p = 0
        while n % factor == 0:
            n //= factor
            p += 1
        if p == 1:
            return False
    return n == 1

def check_power(a):
    if a == 1:
        return True
    for i in range(2, int(sqrt(a)) + 1):
        val = log(a) / log(i)
        if abs(val - round(val)) < 1e-8:
            return True
    return False

def isAchilles(n):
    return check_powerful(n) and not check_power(n)

print(isAchilles(108))

Achilles Numbers เริ่มต้น

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

ผลลัพธ์

True