-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJ_factorize.py
53 lines (41 loc) · 1.75 KB
/
J_factorize.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
J. Факторизация
Основная теорема арифметики говорит: любое число раскладывается на
произведение простых множителей единственным образом, с точностью до их
перестановки. Например:
Число 8 можно представить как 2 × 2 × 2.
Число 50 –— как 2 × 5 × 5 (или 5 × 5 × 2, или 5 × 2 × 5). Три варианта
отличаются лишь порядком следования множителей.
Разложение числа на простые множители называется факторизацией числа.
Напишите программу, которая производит факторизацию переданного числа.
Формат ввода
В единственной строке дано число n (2 ≤ n ≤ 109), которое нужно факторизовать.
Формат вывода
Выведите в порядке не убывания простые множители, на которые раскладывается
число n.
Пример 1
Ввод
8
Вывод
2 2 2
"""
from math import sqrt
from typing import List
from ..timing import timing
@timing
def factorize(number: int) -> List[int]:
j = 2
while number > 1:
for i in range(j, int(sqrt(number + 0.05)) + 1):
if number % i == 0:
number //= i
j = i
yield i
break
else:
if number > 1:
yield number
break
if __name__ == "__main__":
result = factorize(int(input()))
print(" ".join(map(str, result)))