โจทย์: กำหนดเลข n ตรวจสอบว่ามี Integer a, b (b > 1) ทำให้ n = a^b หรือไม่
ตัวอย่าง
n = 125 → True (5³)
อัลกอริทึม
- ถ้า n == 1 → True
- วน i = 2 ถึง √n:
- val = log(n) / log(i)
- ถ้า val ใกล้เคียง Integer (diff < 1e-8) → True
- False
โค้ดตัวอย่าง (C++ → Python)
import math
def solve(num):
if num == 1:
return True
for i in range(2, int(math.isqrt(num)) + 1):
val = math.log(num) / math.log(i)
if abs(val - round(val)) < 1e-10:
return True
return False
n = 125
print(solve(n))
Input / Output
Input: 125 Output: True
หมายเหตุ: โค้ดต้นฉบับเป็น C++ แปลงเป็น Python ใช้ math.log และ math.isqrt สำหรับประสิทธิภาพ