Вопрос № 54838: Здравствуйте уважаемые эксперты!!!
Нужен алгоритм разложения числа на простые множители?Помогите пожалуйста
..
Вопрос № 54.838
Здравствуйте уважаемые эксперты!!!
Нужен алгоритм разложения числа на простые множители?Помогите пожалуйста
Отправлен: 09.09.2006, 18:16
Вопрос задал: Piit (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Stamm
Здравствуйте, Piit!
Решение очень простое: пробегаемся циклом от двух до заданного числа-1. Если остаток деления равен 0, то это и есть простой множитель, делим исходное число нацело(чтобы был тип integer) на найденный множитель. Если мы нашли этот простой множитель, то надо проверить, может там ещё такой же множитель есть, для этого вычитаем 1 из счётчика цикла.
Ответ отправил: Stamm (статус: Практикант)
Ответ отправлен: 09.09.2006, 18:52 Оценка за ответ: 5
Отвечает: Physicist
Здравствуйте, Piit!
Добавлю к изложенному Stamm'ом.
1. "Бежать" в цикле от 2-х до N-1 - непозволительная роскошь. Достаточно до trunc(sqrt(N)).
2. Не нужно перебирать все возможные делители. Например, известно, что все простые числа, кроме 2 и 3 можно представить в виде 6k-1 и 6k+1. Это сокращает время перебора более чем на 60%.
3. Обычно начало таблицы простых чисел хранится в заранее созданном массиве. И лишь в том случае, если этих данных не хватает, включают процедуру перебора.
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 09.09.2006, 20:08 Оценка за ответ: 5
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Piit!
Предложенное решение простое, но ужаснейшее по скорости! Во-первых, достаточно перебирать до корня из этого числа. Во-вторых, можно перебирать только простые числа, сохраняя их в массив. Опять же, до корня из ch. Но это уже писать надо, а мне лень =) Но уж до корня точно сделайте.
В приложении чуть-чуть переработанный код.
Например, изменение переменной цикла напрямую, не рекомендуется. В Делфи такое вообще не компилируется :-(
Приложение:
--------- Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 09.09.2006, 20:11 Оценка за ответ: 5