Ответы
Ответ дал:
1
Ответ:
Python
n = int(input())
slist = []
s = 2
while n > 1:
if n % s == 0:
slist.append(s)
n = n/s
else:
s += 1
print(slist)
mirageKZ:
slist - переменная список
в этом списке будут лежать множители
В 7 строчке ошибка
etojan, поясни
Должно быть n = n//s - целочисленное деление. Иначе при достаточно большом числе n получится нецелым из-за погрешности float
мы туда попадём только если выполнится условие выше n % s == 0
Да, но float представляет все целые числа без погрешности только до 2^52, на больших числах твой код не будет всегда работать, потому что n при первом же делении станет типа float, а не int
а можно решение без списков
Вот пожалуйста, разложение на множители числа 12345678912345678912 по мнению курильщика: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 11157689, 60029989]
можно. вместо slist.append(s) написать print(s). А последнюю строчку затереть. Или как предложил etojan.
Ответ дал:
0
num = int(input())
div = 2 # претендент на делитель
while num > 1:
if num % div == 0: # остаток от деления равен нулю
print(div) # печатаем делитель
num //= div # делим исходное число на делитель, чтоб искать дальше
continue # проверяем еще раз, будет ли делиться снова на этот же делитель
if div > num**.5 + 1: # если делитель уже больше, чем корень из n
print(num) # то единственным таким делителем может быть только само n
break
div += 1 # если не делится - увеличиваем возможный делитель
У меня что-то очень долго считалось то же разложение числа 12345678912345678912, поэтому я добавил короткую схему - простой делитель не может быть больше корня из числа, только если это не само число
Правильный ответ разложения: 2, 2, 2, 2, 2, 2, 3, 313, 35129, 5847949643
etojan, разложение на множители числа 12345678912345678912. 2
2
2
2
2
2
3
313
35129
Произведение будет = 2111112384.
2
2
2
2
2
3
313
35129
Произведение будет = 2111112384.
etojan, вы всё слишком усложняете. Вы используете вводимое число типа Int. Не знаю скольки битная у Вас система, но значения это типа Int32: [-2147483648,2147483647]
Int64: [-9223372036854775808,9223372036854775807]. Для чего брать значения выходящие за диапазон данного типа?!
Int64: [-9223372036854775808,9223372036854775807]. Для чего брать значения выходящие за диапазон данного типа?!
Уважаемый профессор, в CPython, который является стандартным интерпретатором для языка Python, числа Int имеют максимальную длину размера выделенной для интерпретатора памяти. В некоторых компиляторах, действительно, они могут быть ограничены 32 или 64 битами, но по умолчанию в них подключена длинная арифметика.
Пожалуйста, запустите хоть раз для сравнения моё решение и ваше, после чего убедитесь в моей правоте и давайте закрывать этот спор. Местные ыксперты всё равно считают ваше решение лучшим
Вас заинтересует
2 года назад
3 года назад
3 года назад
8 лет назад
9 лет назад