X

SBT Tin học 10 Cánh diều

Liệt kê ước số Viết chương trình nhập vào một số nguyên dương n và in ra tất cả các ước số của n.


Giải SBT Tin học 10 Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp

Haylamdo biên soạn và sưu tầm lời giải Câu F44 trang 32 SBT Tin học 10 trong Bài 8, 9: Câu lệnh lặp. Thực hành câu lệnh lặp sách Cánh diều. Với lời giải ngắn gọn nhưng đủ ý hy vọng sẽ giúp các học sinh dễ dàng nắm được cách làm bài tập trong Tin học 10.

Câu F44 trang 32 SBT Tin học 10: Liệt kê ước số

Viết chương trình nhập vào một số nguyên dương n và in ra tất cả các ước số của n.

Lời giải:

Cách 1: Một trong những giải pháp đơn giản là thử mọi giá trị số nguyên d từ l tới n, mỗi khi gặp một giá trị ở là ước số của n thì in ra ngay giá trị d đó. Tham khảo chương trình sau:

Liệt kê ước số Viết chương trình nhập vào một số nguyên dương n và in ra tất cả các ước số của n.

Ví dụ

Input

Output

60

1 2 3 4 5 6 10 12 15 20 30 60

Cách 2: Cách làm trên khá chậm khi gặp giá trị n lớn (chẳng hạn n = 109). Một cải tiến nhỏ là dựa vào nhận xét: Ngoại trừ ước d = n, tất cả các ước số khác của n đều không vượt quá n2, vì vậy ta chỉ cần thử d trong phạm vi [1, n2] còn riêng ước d = n sẽ được in ra sau. Mặc dù tốc độ chương trình cải thiện gấp đôi, phương pháp này vẫn còn rất chậm.

Cách 3: Dựa vào nhận xét: Nếu d là ước số của n thì “nd cũng là ước số của n”. Trong hai ước số d và nd , chắc chắn có một số nhỏ hơn hoặc bằng n . Vì thế ta chỉ cần thử d trong phạm vi [1; n ], khi tìm thấy. một ước số d của n trong phạm vi này, ta in ra d và in ra luôn cả ước nd

Lưu ý: Trường hợp d = nd (n là số chính phương), ta chỉ được in ra một ước để tránh trùng lặp.

Tham khảo chương trình sau:

Liệt kê ước số Viết chương trình nhập vào một số nguyên dương n và in ra tất cả các ước số của n.

Xem thêm lời giải Sách bài tập Tin học 10 Cánh diều hay, ngắn gọn khác: