Рамиль Альварес Х.
Московский государственный университет имени М.В. Ломоносова, факультет ВМК, г. Москва, вед.
научн. сотр., к.ф.-м.н., [email protected]
АЛГОРИТМ ИЗВЛЕЧЕНИЯ КВАДРАТНОГО КОРНЯ ИЗ БОЛЬШИХ ЦЕЛЫХ
ЧИСЕЛ
КЛЮЧЕВЫЕ СЛОВА
Большие числа извлечение квадратного корня деление с остатком. АННОТАЦИЯ
В статье дано более простое обоснование алгоритма, чем описанное в работе [1] и предложена его модификация, позволяющая за счет использования операции деления с остатком существенно уменьшить число операций с большими числами. Описан простой способ определения очередной цифры при вычислении квадратного корня " в столбик"[2].
В работе [1] предложен алгоритм точного вычисления целого значения квадратного корня из больших чисел. При этом достигнуто уменьшение числа операций умножения и деления больших чисел. Подкоренное число разбивается справа налево на пары цифр с добавлением слева нуля к старшей паре, если она состоит из одной цифры. Идея алгоритма состоит в том, что на первом шаге вычисляется n1 старших цифр корня. Начальное число цифр выбирается таким образом, чтобы имеющие средства (калькуляторы, компьютерные программы) позволяли вычислить точное целое значение корня из числа, образованного n1 старшими парами цифр N.
На каждом последующем итерационном шаге при определенных ni цифрах корня вычисляется группа следующих , показано, что эта группа состоит из Пм цифр. На последнем шаге может возникнуть ситуация когда nr1 будет больше чем n-ni. По этому введем ki - число определяемых на очередном шаге цифр равное min(ni-1,n-ni). Используемые обозначения
N - исходное целое число, состоящее из n пар цифр,
N - значение N рассматриваемое как вещественное число с запятой после ni - ой пары старших цифр,
Aj - вещественное значение корня из Ni,
Ni - число образованное ni старшими парами числа N, ____
Ai - целое значение корня из числа Ni, то есть целая часть числа а. (число с ni
цифрами), A i = L Aj
xi - дробная часть числа Ai (xi= а. -Ai),
Ri - остаток корня Ni, то есть Ri=Ni - а. ,
Bi+1 - целое число образованное ki цифрами N следующими за числом Ni,
Ci+1 - целое число образованное ki цифрами N следующими за числом Bi+1,
Di+1 - целое число, определяющее ki (min (ni-1,n-n) следующих верных цифр корня.
Утверждение
Если вы численных ni старших верных цифр целого корня из N ,то на следующем шаге nr1
N1- a2
цифр после запятой вещественного числа --- определяют следующие верные цифры корня.
2 A ■
j
Доказательство
-—- "— 2 2 2 Число — j можно представить в виде — j = (A+xQ =Ai +2^A№+xi .
Откуда xi равно
—i- A2 x2
2 • A. 2 • A.
jj
Ni- A2 x2
Приняв приближенное значение Xi равным--— ,допускаем погрешность
2 -A 2-A
ni-1
Оценим эту погрешность. Так как ^<1 и А состоит из п цифр ( Л; > 10 ' то
2
^</2 • 10"i-1
Qi+i
2 *Ai
Ni- A2
Таким образом доказано, что nr1 цифр после запятой дроби ——-— определяют
2 • Ai
следующие верные цифры корня.
Вычисление следующих верных цифр корня
Целое число Di+i, определяющее ki следующих верных цифр корня, равно
L ^ • 10ki J ,
2 • A. '
i
N-A2 k . L(N-A2)• 10Kil IN• 10KlJ-A2• 10Kl Di+1 = L ——L • 10 ki J = L^—^-J = L—i-i-J.
i+1 2 • A. 2-A 2-A
i i i
k , k-Заметим, что L N • 10 i J равно Ni • 10 i +Bi+i, поэтому
d , Ni- 10ki +B.+ i-A2- 10ki , , (N-a2) •10ki + в-+ 1 , . Ri'10ki +B+1 ,
Di+1=L 2*~A j = L 2-A J=L 2-A 1
При делении с остатком Ri -10ki +Bi+i на получаем неполное частное Di+i и остаток
(Ri -10Ц +Bi+1)/C2-Ai) = Di+lOст (Qi+i) , Qi+i = Ri -10Ц +Bi+r2^Di+i Определение остатка корня Ni+1
о k k
Ri+i = Ni+i - A2+1 = Ni -10 i + Bi+i -10 i + Ci+i- (Ai -10 i +Di+i)2 =
>k k т ?-k k 2
= Ni -102ki +Bi+i -10k + Ci+i- A2-102ki - 2^Ai•Di+i -10k +D2+1 - =
= ((Ni - A2 ) -10ki +Bi+i-2^Ai^Di+i) -10ki +Ci+i- Df+J =
k k 2 = (Ri -10 i +Bi+i- 2^Ai^Di+i) -10 i + Ci+i- Di2+1
Заменив в последнем выражении скобку на Q i+i, имеем
Ri+i = Q i+i -1°ki + Ci+i -di2+1
Формулы алгоритма
Таким образом, получаем формулы
ki = min (ni-i, n-ni) kk (Ri -10 i +Bi+i)/(2Ai) = Di+l0ст (Qi+i), ^ = Ai -10 i +Di+i
Ri+i = Qi+i -10ki +Ci+i- Df+i ' ni+i = ni+ki. Заметим, что если значение ki на каждом итерационном шаге принять равным i, получатся формулы модифицированной схемы вычисления квадратного корня "в столбик" [2]
(Ri - 10 +bi+i)/(2•Ai) = di+i ост (Qi+i)
VI = V 10 + ^+1- ^+1 = ^+1* 10 + Я+1- ¿12+1'
где ^+1- очередная цифра корня bi+l и ^+1- цифры, следующие после числа Ni и цифры bi+l, соответственно.
Пример вычисления корня
Вычислим целое значение корня из числа, состоящего из 24 цифр (п=12). 98 76 54 32'10 98 76'54 32 0 98 76 Апострофом (') выделены используемые на каждом шаге группы цифр . Для определения начального приближения корня возьмем корень из числа, состоящего из 4 старших пар (98 76 54 32). Для нахождения корня из этого числа воспользуемся модифицированной схемой вычисления цифра за цифрой.
Начальное значение корня из числа 98 равно 9 (А1), а остаток корня -17 (Ях). Для нахождения второй цифры d2 надо разделить число ЯД0+Ь2 (177) на 2А1 (18)
117/18 = 9 ост (15), то есть d2 = 9 и Q2 = 15. Остаток корня из числа 9876 (Я2) равен разности Q2 10+С2 и квадрата d2
156-81 = 75, то есть А2 = 99 и Я2 = 75. Повторяя эти вычисления, будут получены цифры dз и d4 и остатки и Я4. Результаты вычислений представлены в Таблице 1.
Таблица 1
i 4+1 ^+1 Qi+l Я+1
1 9 17 7 9 15 6
2 99 75 5 3 161 4
3 993 1605 3 8 165 2
4 938 1588
Таким образом, начальное значение корня А1 из числа 98 76 54 32'10 98 76'54 32 0 98 76 равно 9 938, разность корня Я -1 588, П1 равно 4 и к1=3, то есть можно одновременно вычислить группу из трех цифр.
К остатку корня Я приписываются 3 следующие цифры числа В2 (109). Полученное число 1 588 109 делится с остатком на удвоенный корень А1 (19 876).
1 588 109/19 876 = 079 ост (17 905)
то есть D2 = 079 и Q2 = 17 905.
К остатку от деления Q2 приписываются 3 следующие цифры числа С2 (876), из полученного числа вычитается квадрат неполного частного D2 (6 241).
17 905 876-6 241=17 899 635
Таким образом, после первого итерационного шага вычислены 7 старших цифр корня - А2 (9 938 079) и остаток корня Я2 (17 899 635).
На втором итерационном шаге будут вычислены еще 5 цифр корня, так как тт(пг1, П-П1) равен 5. Результаты вычислений представлены в Таблице 2.
Таблица 2
i ^+1 ^+1 й+1 4+1
1 4 9 938 1 588 3 109 079 17 905 876
2 7 9 938 079 17 899 635 5 54 321 90 055 16 145 631 09 876
3 12 9938 079 90055 1 606 453 206 851
Таким образом, целое значение корня из числа 987 654 321 098 765 432 109 876 равно 993 807 990 055, а остаток - 1 606 453 206 851.
Литература
1. 1. Колесов А. Н. Нахождение точного целочисленного корня квадратного Доклады ТУСУРа - Томск: Томский государственный университет систем управления и радиоэлектроники 2009. №2(20) С. 162-168.
2. 2. Соловьев Ю. П. Старый алгоритм // Квант - М. : Наука 1987. № 3 С. \34-37.