2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Факторизация рекуррентным методом
Сообщение30.06.2019, 20:10 
Заслуженный участник


20/08/14
11867
Россия, Москва
Учитывая что по таблице выше метод Ферма выигрывает всегда когда отношение сомножителей менее примерно 10-20, то вполне можно дойти именно им до примерно такого соотношения, а вот потом продолжать уже вашим.

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение10.07.2019, 13:37 


29/07/08
536
Dmitriy40 в сообщении #1401415 писал(а):
Очень уж подозрительно выглядит почти линейное возрастание $b_i$, напрашивается какой-то метод более быстрого изменения $b_i$

Меня этот вопрос заинтересовал тоже. Предлагаю усовершенствование метода рекуррентной факторизации

Начальные условия прежние.
Побережный Александр в сообщении #1401136 писал(а):
Обозначения.
$n=[\sqrt{N}]$, где []- целая часть числа N.
$R=(n+1)^2-N$
$R'=N-n^2$, причем $R+R'=2n+1$.

$a_0=[\sqrt{R}]$, $b_0=[\frac{R'+a_0^2}{2(n-a_0)}]+1$

Начало цикла.
$N_i=(n-a_i)(n+a_i+2b_i)$, (причем должно выполняться $N_i>N$)
$s_i=n-2a_i-b_i$, ($s_i$ может быть и отрицательным)

$k_i=\lceil\frac{\sqrt{(s_i)^2+(N_i-N)}+s_i}3\rceil$, (где $\lceil \rceil$ округление в большую сторону)

$a_{i+1}=\lceil\sqrt{(n+b_i+k_i)^2-N}-(b_i+k_i)\rceil$

$b_{i+1}=\lceil\frac{R^\prime+a_{i+1}^2}{2(n-a_{i+1})}\rceil$

Цикл заканчивается, когда числа $a$ и $b$ станут натуральными

Dmitriy40 в сообщении #1401415 писал(а):
Например, даже для $N=101\cdot907$ надо более $120$ итераций.

Рассмотрим этот пример.

$N=101\cdot907=91607$

$n=302$

$R=202$

$R^\prime=403$

Следовательно, $a_0=14, b_0=2$

Проведем первый цикл.

$N_1=(302-14)(302+14+2\cdot2)=288\cdot320=92160$

$s_1=n-2\cdot14-2=272$
$
k_1=\lceil\frac{\sqrt{(272)^2+(92160-91607)}+272}3\rceil=182$

$a_1=\lceil\sqrt{(302+2+182)^2-91607}-(2+182)\rceil=197$

$b_1=\lceil\frac{403+197^2}{2(302-197)}\rceil=187$

Первый цикл закончен.
Алгоритм позволил перешагнуть сразу на $185$ единиц для числа $b$.

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение15.08.2019, 17:13 


29/07/08
536
Уважаемые софорумники!
Прошу оценить эффективность модифицированного алгоритма факторизации рекуррентным методом (предыдущее сообщение).
К сожалению, у меня нет возможности работать с большими числами. Надеюсь усовершенствование ускоряет работу алгоритма.
Для меня Ваше мнение очень важно!

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение16.08.2019, 22:11 


16/08/19
124
В вашем алгоритме в теле цикла в двух местах извлекается квадратный корень
Какой формат должен быть у извлекаемого корня - целочисленный или с плавающей точкой ?

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение16.08.2019, 22:34 
Заслуженный участник


20/08/14
11867
Россия, Москва
mathpath в сообщении #1410848 писал(а):
В вашем алгоритме в теле цикла в двух местах извлекается квадратный корень
Какой формат должен быть у извлекаемого корня - целочисленный или с плавающей точкой ?
Очевидно с плавающей точкой, иначе (целочисленный) как минимум не было бы смысла округлять (причём вверх!) значения $a_i$, они всегда автоматом были бы целыми.

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение16.08.2019, 22:45 


16/08/19
124
Насколько мне неизвестно, для сильно больших чисел не существует эффективных алгоритмов извлечения корня
с плавающей точкой. Эффективные - значит очень быстрые.

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение17.08.2019, 01:19 
Заслуженный участник


20/08/14
11867
Россия, Москва
Ну здесь можно обойтись и целочисленным корнем, если проверять точно ли он извлёкся, а в $k_i$ вместо округления корня проверять подкоренное выражение в зависимости от остатка $s_i \bmod 3$. Или использовать целочисленный корень, а в конце проверить подстановкой нужно ли увеличивать результат на 1. Но это всё усложнение алгоритма.
И кстати тот же метод Ньютона при подходящем выборе начального приближения даёт квадратичную сходимость, т.е. не так уж и много придётся сделать длинных медленных делений.
В общем это решаемо.

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение18.08.2019, 23:12 


29/07/08
536
Уважаемый Dmitriy40,
если вы работали с модифицированным алгоритмом, можете ли вы описать, как он работает с составными числами со 100 десятичными знаками?
Какое максимальное время затрачивается на "неудобные" числа?
И вообще, может возникают новые проблемы при работе алгоритма!

 Профиль  
                  
 
 Re: Факторизация рекуррентным методом
Сообщение21.08.2019, 02:08 
Заслуженный участник


20/08/14
11867
Россия, Москва
Что-то он (от 10 июля выше) не на всех числах работает (первые 5 из 85 итераций):
Код:
N=101*577:
i=0, a=16, b=2, n=241, N=58277, R=287, R'=196
i=1, a=156, b=145, Ni=58725, s=207, k=139
i=2, a=157, b=148, Ni=58395, s=18446744073709551400, k=1
i=3, a=158, b=152, Ni=58296, s=18446744073709551395, k=1
i=4, a=159, b=156, Ni=58349, s=18446744073709551389, k=1
i=5, a=160, b=160, Ni=58384, s=18446744073709551383, k=1

(Код PARI/GP)

Код:
n=sqrtint(N);
R=(n+1)^2-N; Rs=N-n^2;
a=sqrtint(R); b=floor((Rs+a^2)/2/(n-a))+1; i=0;
print("i=",i,", a=",a,", b=",b,", n=",n,", N=",N,", R=",R,", R'=",Rs);
while(N%(n-a)!=0,
   Ni=(n-a)*(n+a+2*b);
   s=n-2*a-b;
   k=ceil((sqrt(s^2+(Ni-N))+s)/3);
   a=ceil(sqrt((n+b+k)^2-N)-(b+k));
   b=ceil((Rs+a^2)/2/(n-a));
   i++;
   printf("i=%u, a=%u, b=%u, Ni=%u, s=%u, k=%u\n",i,a,b,Ni,s,k);
);
print(n-a,"*",N\(n-a));

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Stratim


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group