Я написал эту программу, которая сообщит вам два кратных факторов вашего входа. Ex. если бы я должен был ввести 35 (полупервичный), программа напечатала 5 и 7, которые являются двумя простыми числами, умноженными на 35.Лучший способ выполнить вычисления в списке/кортеже в Python 3x
Но мне интересно, есть ли более краткий или питонический способ перебора этот кортеж, поэтому мне не пришлось бы кодировать все эти утверждения «elif», которые вы видите ниже.
Также было бы здорово, если бы мне не пришлось полагаться на какие-либо внешние библиотеки.
# multiples of semiprimes 4 - 49
tuple1 = (2, 3, 5, 7)
# tuple 1 calculations
while True:
try:
semiprime = int(input('Enter Semiprime: '))
except ValueError:
print('INPUT MUST BE AN INTEGER')
continue
# index 0 - 3
if (tuple1[0]) * (tuple1[0]) == semiprime:
print((tuple1[0]), (tuple1[0]))
elif (tuple1[0]) * (tuple1[1]) == semiprime:
print((tuple1[0]), (tuple1[1]))
elif (tuple1[0]) * (tuple1[2]) == semiprime:
print((tuple1[0]), (tuple1[2]))
elif (tuple1[0]) * (tuple1[3]) == semiprime:
print((tuple1[0]), (tuple1[3]))
# index 1 - 3
elif (tuple1[1]) * (tuple1[0]) == semiprime:
print((tuple1[1]), (tuple1[0]))
elif (tuple1[1]) * (tuple1[1]) == semiprime:
print((tuple1[1]), (tuple1[1]))
elif (tuple1[1]) * (tuple1[2]) == semiprime:
print((tuple1[1]), (tuple1[2]))
elif (tuple1[1]) * (tuple1[3]) == semiprime:
print((tuple1[1]), (tuple1[3]))
# index 2 - 3
elif (tuple1[2]) * (tuple1[0]) == semiprime:
print((tuple1[2]), (tuple1[0]))
elif (tuple1[2]) * (tuple1[1]) == semiprime:
print((tuple1[2]), (tuple1[1]))
elif (tuple1[2]) * (tuple1[2]) == semiprime:
print((tuple1[2]), (tuple1[2]))
elif (tuple1[2]) * (tuple1[3]) == semiprime:
print((tuple1[2]), (tuple1[3]))
#index 3 - 3
elif (tuple1[3]) * (tuple1[0]) == semiprime:
print((tuple1[3]), (tuple1[0]))
elif (tuple1[3]) * (tuple1[1]) == semiprime:
print((tuple1[3]), (tuple1[1]))
elif (tuple1[3]) * (tuple1[2]) == semiprime:
print((tuple1[3]), (tuple1[2]))
[ 'itertools.combinations (tuple1, 2)'] (https://docs.python.org/dev/library/ itertools.html # itertools.combinations) – jedwards
Путь @jedwards - это мудрость! Вложенный цикл for тоже выглядит нормально. – heLomaN
вместо того, чтобы ограничивать себя предварительным подсчетом простых чисел, вы можете рассчитать первичную факторизацию заданного числа, используя либо первичную контрольную функцию, либо просто генераторную, такую как сито эратостенов – Copperfield