View Single Post
Old 16-04-2008, 11:36   #16
LamHoa
Búa Đá
 
LamHoa's Avatar
 
Tham gia: Jan 2008
Bài: 53
VZD: 1.096
Cảm ơn: 6
Điểm: 5/5 bài viết
Default

Trích:
so_0_lanh_lung View Post
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
Code:
For i:=1 to n-1 do
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.
LamHoa vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Thành viên đã cám ơn bài viết này của LamHoa:
so_0_lanh_lung (18-04-2008)