Trích:
so_0_lanh_lung
em chưa hiểu cái
for i:=(N div 2) downto 1 do
của anh vietanh279 vì nó là lấy phần dư mà
|
mod mới là lấy phần dư em ạ, div là thương, ví dụ
(10 div 3) = 3
(10 mod 3) = 1
vietanh279 cho biến i chạy trong khoảng từ 1 đến (n div 2) vì các số lớn hơn (n div 2) thì ko thể là ước của n được, giới hạn như thế máy sẽ chương trình sẽ nhanh hơn, trong chương trình chị viết em cũng có thể thay dòng
thành
Code:
For i:=1 to (n div 2) do
hoặc
Code:
For i:= (n div 2) downto 1 do
thì kết quả cũng ko thay đổi gì.
Trong bài làm của vietanh279, bạn ấy cho i chạy ngược nên sẽ tính được tổng các ước của n từ ước lớn nhất trở xuống, rồi khi tổng đó vượt quá n là thôi (mà ko nhất thiết phải cộng thêm các ước nhỏ nữa) và chuyển sang kiểm tra giá trị n khác, như thế sẽ tiết kiệm nhiều thời gian cho quá trình chương trình chạy.
Em cho chương trình vào trong thẻ [code] [
/code] thì các dáu trắng đầu dòng sẽ được giữ nguyên, ko bị trở về thẳng hàng.