Liệt kê tất cả các ước của một số nguyên dương

Mấy anh chị cho e hỏi hướng làm nhanh nhất được không ạ, tuy e làm đúng code python nhưng chạy chậm quá , em nghĩ các kiểu để optimize nhưng vẫn ko được ạ.

post code lên cho mn xem b


đây ạ bài này em làm hướng đơn giản nhưng muốn tối ưu thì e ko bt phải làm sao ạ

em cũng tính là chạy đến căn 2 của n rồi nhưng bước triển khai code thì em bí :frowning:

liệt kê tất cả các ước thì làm vậy đúng rồi, Tối ưu cái gì nữa…

do 1 phải chạy code trong 1s á anh. Nếu mình nhập số nhỏ hơn n^10 thì chạy ổn
nhưng nếu từ n^10 trở lên sẽ bị treo máy ạ. Ví dụ n =100000000000, thì ct phải chạy tới 100000000000 lần gây ra hiện tượng treo máy, em muốn tối ưu nó n =100000000000 nhưng số lần chạy giảm xuống ko gây treo máy ạ

chỉ chạy tới căn bậc 2 của n thôi, mỗi lần chia hết là mình được 2 số
i và n//i

ví dụ 100 thì chỉ chạy tới 10 được rồi
chia hết cho 5 thì in ra hai số 5 và 20 (100//5)

5 Likes

e cx nghĩ ra thế ạ nhưng bước triển code thì…

thì sao? có khó khăn gì?

Output có cần phải từ 1 đến n? Nếu vậy thì dùng 1 list lưu từ 1 đến sqrt(n) :smiley:

4 Likes

Nếu n chẵn thì lấy n /2 sẽ đc ước số lớn nhất của n, vì 2 là số chia bé nhất. Rồi cho code chạy từ 3 đến n/2 thôi.
Nhu vậy là optimize nhanh gấp 2 rồi.

Nhìn vào phép chia sẽ thấy a = b/c, giống như hai đứa trẻ chơi bập bênh. b càng lớn thì c càng nhỏ và ngược lại.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?