Форум сайта python.su
ksФакторизация числа - это представление числа в виде произведения простых чисел. Если вам надо получить список множителей не только для 600851475141, но и для 600851475141 + n, …, то этот способ предпочтительный. Если же вам надо один раз разложить на множители то будет достаточно и простого перебора:
Это как (сам процесс факторизации числа - при чем он здесь, не понятен)?
n = 600851475141
m = []
for i in range(1, int(n**0.5), 2):
if n % i == 0:
m.extend([i, n/i])
print sorted(m)
Офлайн
:)
ksВы сказали что по вашим оценкам на вашей аппаратуре нужны миллисекунды на деление, вот я и посчитал сколько времени в годах надо для выполнения вашего цикла. Достаточно просто подождать 19 лет и цикл закончится.
Что вы посчитали?
Отредактировано doza_and (Март 11, 2013 20:07:30)
Офлайн
pnk.andrian
Если же вам надо один раз разложить на множители то будет достаточно и простого перебора:n = 600851475141
m = []
for i in range(1, int(n**0.5), 2):
if n % i == 0:
m.extend([i, n/i])
print sorted(m)
>>> n = 24 >>> m = [] >>> for i in range(1, int(n**0.5), 2): ... if n % i == 0: ... m.extend([i, n/i]) ... >>> print sorted(m) [1, 3, 8, 24] >>>
>>> n = 25 >>> m = [] >>> for i in range(1, int(n**0.5), 2): ... if n % i == 0: ... m.extend([i, n/i]) ... >>> print sorted(m) [1, 25] >>>
>>> n = 121 >>> m = [] >>> for i in range(1, int(n**0.5) + 1, 2): ... if n % i == 0: ... m.extend([i, n/i]) ... >>> print sorted(m) [1, 11, 11, 121] >>>
pnk.andrianпритом, что ниоткуда не следует, что ему нужны простые делители числа (может, ему все делители нужны)
А при чем здесь простые числа?
Отредактировано py.user.next (Март 12, 2013 02:03:19)
Офлайн
py.user.nextБагов нет. Универсального алгоритма я не обещал. Если нужен общий, относительно быстрый алгоритм, то факторизуем число (Факторизация целых чисел) и далее из простых множителей составляем все возможные.
а вот ещё баг
Офлайн
pnk.andrianчисло повторяется два раза - это баг
Багов нет. Универсального алгоритма я не обещал.
Офлайн