Я уже решил проблему 5 Project Euler (Какое наименьшее положительное число равномерно делится (без остатка) на все числа от 1 до 20?), Но я хочу найти более быстрый способ (в настоящее время 0.000109195709229 секунд).Почему изменился и другой список?
Я попробовал динамический подход, но когда я запускаю этот код (это только первая часть) Я не понимаю, почему д [VAR] [счетчик] получает +1, если я явно писал D [ i] [counter] + = 1.
n = 20
d = {1:[0,1] + [0]*19} #a dictionary that assigns to each number a list of its prime factorization
for i in xrange(2,3): #I changed n+1 with 3 for simplicity
var = i
counter = 2
notDone = True
while notDone:
if var % counter == 0:
var /= counter
print var, d[var]
d[i] = d[var] #i has the same prime factorization of var ...
print var, d[var]
d[i][counter] += 1 #... except for 1 number (counter)
print var, d[var] #wtf?
notDone = False
else:
counter += 2 if counter != 2 else 1
Это результат:
1 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
почему это происходит?