Простая факторизация с большими числами в PythonPython

Программы на Python
Ответить
Anonymous
 Простая факторизация с большими числами в Python

Сообщение Anonymous »

whazzup,

У меня возникла следующая проблема, и я не могу ее решить.
Обработка чисел длиной от 5 до 52, я хочу 't, чтобы получить их простые множители.
Используя Python, я нашел следующие два алгоритма:

I.

Код: Выделить всё

def faktorisiere(n):
l = []  # Lösungsmenge
# Auf Teilbarkeit durch 2, und alle ungeraden Zahlen von 3..n/2 testen
for i in chain([2], range(3, n//2 + 1, 2)):
# Ein Teiler kann mehrfach vorkommen (z.B. 4 = 2 * 2), deswegen:
while n % i == 0:
l.append(i)
print(i)
n = n // i  # "//" ist ganzzahlige Division und entspricht int(n/i)
if i > n:  # Alle Teiler gefunden? Dann Abbruch.
break
print(l)
II.

Код: Выделить всё

x = input("Number: ")
mode = x[-1:]
x = int(x[:-1])
if int(x) < 1000000000000:
faktorisiere(x)
else:
if mode == 'f':
faktorisiere(x)
rx = int(sqrt(x)) + 1

for i in range(1, rx+1):
if mode == 'a':
if x % i == 0:
y = int(x/i)
print(str(x), "=", i, "*", str(y))
if mode == 'u':
if i % 2 != 0:
if x % i == 0:
y = int(x/i)
print(str(x), "=", i, "*", str(y))
Но первый код очень медленно вычисляет такие числа:
1917141215419419171412154194191714

Второй — работаю немного быстрее, но получаю неверные результаты и не могу найти ошибку в коде.
В качестве примера возьмем данное число.
Это это первые строки вывода Python:
  • 1917141215419419171412154194191714 = 1 *
    1917141215419419143900621852114944
  • 1917141215419419171412154194191714
    = 2 * 958570607709709571950310926057472
  • 1917141215419419171412154194191714 = 3 *
    639047071806473023947675938062336
Но, как видите, эти умножения не равны результат.
Есть ли ошибка в коде?
Или это просто из-за длины чисел?
Надеюсь, вы мне поможете.

С наилучшими пожеланиями,
TimeMen

Подробнее здесь: https://stackoverflow.com/questions/515 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»