Ta định nghĩa số hoàn hảo như sau: Số hoàn hảo là một số tự nhiên mà tổng tất cả các ước tự nhiên thực sự của nó thì bằng chính nó. Vậy ước thực sự là gì? Là các ước không bằng số đó.
VD: 6 là số hoàn hảo vì 6 = 1+2+3
Ta hãy cùng tìm hiểu về thuật toán kiểm tra số hoàn hảo và minh họa chúng trong ngôn ngữ lập trình Pascal và Scratch để xem có gì khác biệt không nhé.
Thuật toán kiểm tra số hoàn hảo
Ta nhận thấy bài toán này phải sử dụng kĩ thuật cộng dồn để tính tổng (S) các ước thực sự của số a.
Khởi động S =0;
Duyệt từ 1 đến a – 1 số nào là ước của a thì cộng dồn vào S
Thật đơn giản phải không nào, sau đây chúng ta cùng xem minh họa thuật toán này trong Pascal và Scratch có gì khác không nhé.
Chương trình kiểm tra số hoàn hảo trong Pacal
Chương trình dưới đây được viết bằng cách sử dụng chương trình con, mình luôn thích sử dụng chương trình con để viết bởi nó giúp mình dễ phân tích một bài toán. Có thể lúc đầu các bạn chưa quen với chương trình con thì thấy nó phức tạp nhưng khi đã thạo rồi thì các bạn sẽ thấy được giá trị hết sức to lớn của nó.
Dữ liệu vào file: hoanhao.inp | Dữ liệu ra file: hoanhao.out |
Chứa số n (n <1 tỉ) | Yes (No) |
Code Pascal
Chương trình kiểm tra số hoàn hảo trong Scratch
Nhìn vào thuật toán thì các bạn có thể dễ dàng thực hiện được chương trình kiểm tra số hoàn hảo trong Scratch rồi phải không nào, mình sẽ gợi ý như sau:
Các bạn hãy tạo một đối tượng (Cô giáo chẳng hạn) và lập trình cho đối tượng như sau:
- Khi lá cờ được nhấn
- Hỏi ‘bạn muốn kiểm tra xem số nào có phải là số hoàn hảo không?’ và đợi người dùng trả lời
- Tạo và khởi động biến i = 1, biến S để lưu tổng các ước bằng 0
- Lặp lại “Trả lời” – 1 lần (“Trả lời” chứa số cần kiểm tra có phải là số hoàn hảo hay không)
Nếu trả lời chia hết cho i thì cộng dồn i vào S
Tăng i lên 1 - Kết thúc vòng lặp ta chỉ cần kiểm tra xem S có bằng “Trả lời” không và kết luận.
Các bạn hãy tự thực hiện xem thế nào nhé. Chúc các bạn thành công và xin hẹn gặp lại trong bài viết tiếp theo.
Trong scratch khó hiểu quá
Thực ra trong Scratch rất dễ bạn bạn chỉ cần kéo thả, rất trực quan
không có mấy chõ hkoong hiểu rõ mấy
dễ mà m làm rồi………………………………..mới lạ