Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 213
от 14.09.2006, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 201, Экспертов: 53
В номере:Вопросов: 1, Ответов: 3


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное