Cho một số nguyên n. Ta cần kiểm tra xem n có phải là số chính phương hay không. Số chính phương là số có căn bậc hai là số nguyên.
Ví dụ: n = 36 → True vì 36 = 6 × 6.
Thuật toán
- Tính phần nguyên của căn bậc hai:
sq_root = int(sqrt(n)). - Trả về
Truenếusq_root * sq_root == n, ngược lạiFalse.
Triển khai
from math import sqrt
def solve(n):
sq_root = int(sqrt(n))
return (sq_root * sq_root) == n
n = 36
print(solve(n)) # True
Đầu vào / Đầu ra
Input: 36
Output: True
Mở rộng: Đối với số rất lớn, có thể dùng math.isqrt (Python 3.8+) để tránh lỗi làm tròn float:
import math
def is_perfect_square(n):
if n < 0:
return False
r = math.isqrt(n)
return r * r == n