Số hoàn hảo (hay còn gọi là số hoàn chỉnh, số hoàn thiện) là một số nguyên dương mà tổng các ước nguyên dương chính thức của nó (số nguyên dương bị nó chia hết ngoại trừ nó) bằng chính nó.
Các số sau là số hoàn hảo: Số 6 (1 + 2 + 3 = 6)
Số 28 (1 + 2 + 4 + 7 + 14 = 28)
Bài toán cơ bản:
Cho số tự nhiên N. Hãy cho biết N có phải là số hoàn hảo hay không?
Dữ liệu vào: Đọc từ tệp SHH.Inp gồm một dòng duy nhất chứa số nguyên
N (1<=n<=109).
Dữ liệu ra: Ghi kết quả ra tệp SHH.Out số 1 nếu N là số hoàn hảo, ngược
lại thì ghi số 0. Ví dụ
SNT.inp SNT.out
28 1
100 0
Phân tích bài toán:
Để kiểm tra số nguyên dương N(N>1) có là số hoàn hảo không, ta tính tổng S tổng các số nguyên i (1<=i<=N-1) mà i là ước của N. Sau đó ta kiểm tra S có bằng N hay không. Nếu S=N thì N là số hoàn hảo, ngược lại N không phải là số hoàn hảo.
Xét các số i với i<=√𝑁, ta thấy nếu i là ước của N thỉ thương N/i cũng là ước của N. Do đó, việc tìm ước với k từ 1 đến N- 1 là không cần thiết, mà chỉ cần kiểm tra k từ 1 đến √𝑁. Khi đó, ta có chương trình:
Lưu ý: Trong hàm kiểm tra tính hoàn hảo nói trên. Nếu N là số chính
phương thì việc tính tổng các ước thực sự của N là chưa đúng. Vì trong trường hợp này 𝑖 = √𝑁 là ước thì N/i cũng là √𝑁 . vì vậy tổng đã cộng 2 lần √𝑁. Ở đây ta thấy số chính phương không bao giờ là số hoàn hảo nên tổng không phải trừ
√𝑁 kết quả vẫn đúng.