s |
m |
n |
lsv |
msw |
msw |
X[n+m]
s - знаковый бит
n – длина числителя, целого числа
m – длина знаменателя
0=232 – max
функция выделения памяти
miracl * mirsys(int len, int Base);
base – основание системы счисления
Если len=10 а base=16, то выделяется 10*16 бит
Return: указатель типа (miracl *)
функция освобождения памяти
void mirexit();
функция выделения памяти под переменную типа big или flash
flash mirvar (int IV)
IV – записывает в созданную big, flash
процедура высвобождения памяти из-под переменной
mirkill(big x) void
Пример
Extern “c”{
#include “miracl.h”
}
miracl *mip=mirsys(100,0);
big n1, n2, flash 3;
n1=mirvar(1);
n2=mirvar(2);
…………….
mirkill(n1);
mirkill n2);
mirexit();
Функции:
1. ввода-вывода;
2. преобразования типов
3. генерация n случайных чисел
4. арифметические и логические операции низкого уровня
int innum(flash x, file*f);
int instr(flash x, char*str);
int cinstr(flash x, char*str);
2≤(mip->iobase)=256;
big x=mirvar(1);
instr (x, “fffff….”);
int otnum(flash x, file*f);
int cotnum(flash x, file*f);
int otstr (flash x, char*str);
int cotstr (flash x, char*str);
void bytes_to_big (int len, char * bytes, big x);
void big_to_bytes(int max, big x, char *bytes);
void convert(int n, big x);
void lpconv(long n, big x);
int compare(big x, big y)
-1: x<y
1: x>y
0:x=0;
int getdipit(big x, int i);
void putdip(int n, big x, int i);
определение количества цифр в числе
int numdig (big x),
функции копирования
void copy(flash x, flash y);
void zero(flash x);
функция изменения макс. числа
определение знака
int exsiqh(flash x)//±1
void insiqh(int s, flash x);
void irand(long seed);
int brand();
int brand(big max, big x);
1<x<max
void strong_init(int len_seed, char *seed, long tod);
void strong_rng(int len_byte, char *x);
void strog_bigrand(big max, big x)
1<x<max
ЛЕКЦИЯ 5. 7.03
Изучение вариантов реализации редукции для целых чисел (классический метод, метод Баретта)
Xk (mod P)
|
b=(2wn=32)
y*d
x*d d-коэффициент
d=2k
1.
2. (=r1-r2)
3. if
4. while // max 2 page
b=4 (любое b>3)
m=(233)4=(47)10; k=3
x=(313221)4
1.1.
1.2. (3132)4*(1113)4=(10231302)4
1.3. (при делении сдвиг вправо на k+1)
2.1. (313221)4mod44=(3221)4ri
2.2. (1023)4*(233)4mod44=(313011)4mod44=(3011)4
2.3. (3221)4-(3011)4=(210)4=(36)10
I=(k2+5k+2)/2
k – разрядность модуля. Оценка сложности
264+232 01100000
ЛЕКЦИЯ №6. 9.03
Простейшие методы и алгоритмы возведения в степень: бинарный и блочный метод.
Метод возведения в степень справа налево
xR mod P, R=2310= M-умножение, S-возведение в квадрат
Алгоритм
M=1; S=x
for (i0, i<t, i++)
{ if (Ri==1)
M=(M*S) mod P
S=(S*S) mod P }
Пример
R=2310 x – число большой разрядности
M |
1 |
x |
x3 |
x7 |
- |
x23 |
R |
(10111) |
1011 |
101 |
10 |
1 |
0 |
S |
x |
I+wt(R)
Метод возведение в степень слева направо
|
||||
|
Алгоритм:
M=x
for (i=t-2, i>=0, i--)
{ M=M2 mod P
if (Ri==1) M=(M*x) mod P }
i |
- |
3 |
2 |
1 |
0 |
Ri |
- |
0 |
1 |
1 |
1 |
M |
x |
x2 |
x4 x5 |
x10 x11 |
x22 x23 |
I+wt(R)-1
Блочный метод (метод окна)
Алгоритм:
X[0]=1; X[1]=x
For(i=1; i<=2R-1; i++)
X[i]=X[i-1]*x
M=1;
For (i=t-1; i>=0; i--)
{M=M2R mod P
M=M*X[ni] mod P}
I+IM*IS
Пример
n=2310==(n1*n0)=(27)8 R=3 (Перевод в 8-ричную систему счисления)
i |
- |
1 |
0 |
ni |
- |
2 |
7 |
M |
1 |
1*x2 |
(x2)8=x16; x16*X[7]=x23 |
Модифицированный блочный метод
X[0]=1; X[1]=x; X[2]=x2
For(i=1; i<=2R-1; i++)
X[2i+1]=X[2i-1]*X[2];
M=1;
For (i=t-1; i>=0; i--)
{}
Метод скользящего окна
//Предвычисления (см. метод. выше)
(nt+1….. n2 n1 n0)2
M=1; i=t-1;
While (i>=0)
{ if (ni==0) {M=M2 mod P;
i--;} else{ nini-1… nl) //выделение подстроки, так, что
i-l+1<=R и nl=1
;
i=l-1; }
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.