1 から 20 までの各整数 (両端を含む) で割り切れる最小の数を見つけようとしています。これは、以前に行った練習問題を改善しようとしているだけです。
引数を取り、それ自体を含む引数よりも小さいすべての正の整数で割り切れる最小の数値を返す関数を作成しましたが、最適化されておらず、数値が大きくなるにつれて実行が比較的遅くなります。
この関数の Big-O 表記法とその理由を知りたいと思っていました。次に、もしあれば、これをスピードアップする方法はありますか?おそらくメモ化でわかりませんか?
def divide_by_all(x):
## the 'pos' variable will be matched up against the argument to keep track of how many of the numbers in ##
## the arguments range are dividing evenly. ##
pos = 0
## the 'count' variable will be set to equal the input argument, possibly
count = x
## create the range of integers for the argument ##
divs = [i for i in range(1,x + 1)]
while pos != x:
for i in divs:
## check if each 'i' in the divs list is evenly divisible ##
## if 'i' is not evenly divisible the 'count'(answer) is incremented, the 'pos' is set back to zero to show ##
## the next 'count' has no evenly divisible in numbers div yet, and then loop over the divs list starts again ##
if count % i != 0:
count += 1
pos = 0
break
## if 'i' is evenly divides into current 'count' increment 'pos' ##
if count % i == 0:
pos += 1
## if 'pos' == the argument 'x', meaning every number in range(x) is evenly divisible ##
## return 'count' ##
if pos == x:
return count
ヒントやアドバイスは大歓迎です!