Дано натуральное число N>1 
. Выведите все его простые натуральные делители с учетом кратности. Алгоритм должен иметь сложность O(n−−√) 
. 
 
Входные данные 
Вводится натуральное число N≤2∗109 
. 
 
Выходные данные 
Выведите ответ на задачу. 
 
Примеры 
входные данные 
12 
выходные данные 
2 2 3
	
	
	Python
	
		
		
								
				
								
				
			
	
		
			Помогите решить задачу на языке Python пожалуйста!
Не знаю, что такое O(n−−√).
O(√n), может быть?
Тогда так:
Сложность деления 32-битных чисел считаем константой. Хотя, по факту это - экспонента от количества бит.
Можно снизить константный фактор ещё в 2 с лишним раза, отсеяв все составные делители до 210 и более трёх четвертей - после 210.
Максимальное простое число в пределах вашей верхней границы: 1999999817. Для него второй алгоритм выдаст 10226 делений, а первый - 22361. Вполне укладывается в асимптотику O(√n).
А если вам нужна сложность O(√n/(log n)), тогда смотрите решето Эратосфена.
				
							O(√n), может быть?
Тогда так:
 def factors(n):
    factors, p, inc = [], 2, 1
    while p * p  1: factors.append(n)
    return factors
print(*factors(int(input()))) Количество проверочных делений для простых чисел не превышает половины корня из числа + 1 (т.к. мы перебираем двойку и нечётные делители, начиная с тройки). Для составных чисел делений намного меньше, т.к. каждый найденный делитель d кратности k уменьшает диапазон для перебора в √(kd) раз.Сложность деления 32-битных чисел считаем константой. Хотя, по факту это - экспонента от количества бит.
Можно снизить константный фактор ещё в 2 с лишним раза, отсеяв все составные делители до 210 и более трёх четвертей - после 210.
 from itertools import accumulate, chain, cycle
INITIAL = [2, 3, 5, 7]
NEXT = [11]
STEPS = [2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 4, 2, 4, 8,
         6, 4, 6, 2, 4, 6, 2, 6, 6, 4, 2, 4, 6, 2, 6, 4, 2, 4, 2, 10, 2, 10]
def factors(n):
    divs = chain(INITIAL, accumulate(chain(NEXT, cycle(STEPS))))
    factors, p = [], next(divs)
    while p * p  1: factors.append(n)
    return factors
print(*factors(int(input()))) Для простого числа 10000004873 (10 млрд) получится около 22860 делений, т.е. меньше четверти от его корня. Первоначальный алгоритм выдавал для него 50000 делений, т.е. почти половину от корня.Максимальное простое число в пределах вашей верхней границы: 1999999817. Для него второй алгоритм выдаст 10226 делений, а первый - 22361. Вполне укладывается в асимптотику O(√n).
А если вам нужна сложность O(√n/(log n)), тогда смотрите решето Эратосфена.
А всё же интересно как ты собираешься сложность O(n−−√) 
расчитывать в таком случае. В теории это всё конечно работает а на практике как?
				
							расчитывать в таком случае. В теории это всё конечно работает а на практике как?
Похожие вопросы
- Помогите решить задачу на языке Python (без использования библиотек)
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Помогите решить задачу в яндекс-практикуме Python
- Помогите решить задачу на python!
- Помогите решить задачу на python! Упражнение 41,45,47.
- Помогите решить задачу на python! Упражнение 49,50,51,52,53.
- Задача по языку Python
- Помогите решить задачу на Python.
 
			 
						