Đây là cách rất ngu ngốc:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Kết quả tôi muốn nhận được tương tự như kết quả này, nhưng tôi muốn một thuật toán thông minh hơn (cái này quá chậm và ngu ngốc :-)
Tôi có thể tìm ra các thừa số nguyên tố và tính bội của chúng đủ nhanh. Tôi đã có một trình tạo ra hệ số theo cách này:
(
yếu tố1, tính đa
hiệu1 ) (yếu tố2, tính đa hiệu2 ) (yếu tố3, tính đa dạng3)
, v.v.
tức là đầu ra của
for i in factorGenerator(100):
print i
Là:
(2, 2)
(5, 2)
Tôi không biết điều này hữu ích bao nhiêu cho những gì tôi muốn làm (tôi đã viết mã nó cho các vấn đề khác), dù sao thì tôi muốn một cách thông minh hơn để làm
for i in divisorGen(100):
print i
xuất cái này:
1
2
4
5
10
20
25
50
100
CẬP NHẬT: Rất cảm ơn Greg Hewgill và "cách thông minh" của anh ấy :) Tính toán tất cả các ước số 100000000 mất 0,01s với cách của anh ấy so với 39 mà cách ngu ngốc đã xảy ra trên máy của tôi, rất tuyệt: D
CẬP NHẬT 2: Ngừng nói rằng đây là một bản sao của bài đăng này . Tính số ước của một số đã cho không cần phải tính tất cả các ước. Đó là một vấn đề khác, nếu bạn nghĩ không phải vậy thì hãy tìm "Hàm số chia" trên wikipedia. Đọc câu hỏi và câu trả lời trước khi đăng, nếu bạn không hiểu chủ đề là gì, chỉ cần không thêm câu trả lời không hữu ích và đã có sẵn.