Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Алгоритм разбит на три части: 10.06.04 12:39 Число просмотров: 4063
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> Возьмем число А. Извлечем корень а. Из таблицы простых > чисел берем число b, ближайшее к а, так что b <= a. > Делим А на b. Имеем b , c (второе целое число) > и d (остаток. Если d равен нулю, то факторизация > завершена). A = b*c +d. > Если d будет больше b, d >b , то надо проделать еще > кое-что.
Остаток d первоначально не будет больше делителя b. Но это, действительно мелочи.
> А именно: находим новое c, c:= c + d/b (без остатка) > новое d, d:= d (mod b)
Ну, ну, что-то вроде получения результатов деления (частного и остатка) для нового делителя по известным результатам для старого.
По-моему все-равно по этому алгоритму придется перебирать все простые числа от квадратного корня исходного до минимального из сомножителей.
> Пока у нас есть b, c и d. Наша задача – довести d до > нуля.
Над минимизацией остатка я подумывал, но увы, находим локальный минимум, а дальше что? Забросил по причине того, что посчитал эту ветку тупиковой.
> Процедура такая: > Берём следующее простое число b2, так что b2<b1. > Ищем следующее d. Оно будет равно d: = d + (c - b2)*( b1 - > b2). > Само c станет равно c: = c + (b1 - b2). > Если d будет больше b2, d >b2 , то > находим новое c, c = c + d/b2 (без остатка) > новое d, d = d (mod b2) > Осталось ещё два. Но об этом позже.
Ждемс...
> P.S. Есть пока замечания? Не придирайтесь, пожалуйста к > мелочам.
Не, к мелочам не буду, остальное - не мелочи.
Самое главное не разочароваться натыкаясь на препятствия/тупики.
|
|
|