У меня возникла следующая проблема, и я не могу ее решить.
Обработка чисел длиной от 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)
Код: Выделить всё
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
Мобильная версия