0 В противном случае
Модульное сложение
Синтаксис: int madd_l (CLINT a, CLINT b, CLINT c, CLINT m);
Вход: a, b (слагаемые), m (модуль)
Выход: c (остаток)
Возврат: E_CLINT_OK. если все в порядке
E_CLINT_DBZ в случае деления на 0
Модульное сложение переменных типа CLINT и USHORT
Синтаксис: int umadd_l (CLINT a, USHORT b, CLINT c, CLINT m);
Вход: a, b (слагаемые), m (модуль)
Выход: c (остаток)
Возврат: E_CLINT_OK. если все в порядке
E_CLINT_DBZ в случае деления на 0
Модульное вычитание
Синтаксис : int msub_l (CLINT a. CLINT b, CLINT c, CLINT m);
Вход: a (уменьшаемое), b (вычитаемое), m (модуль)
Выход: c (остаток)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_DBZ в случае деления на О
Модульное умножение
Синтаксис : int mmul_l (CLINT a, CLINT b. CLINT c, CLINT m);
Вход: a, b (сомножители), m (модуль)
Выход: c (остаток)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_DBZ в случае деления на 0
Модульное возведение в квадрат
Синтаксис: int msqr_l (CLINT a, CLINT c, CLINT m);
Вход: a (множитель), m (модуль)
Выход: c (остаток)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_DBZ в случае деления на 0
Программная реализация
#pragma hdrstop
#include <FLINT.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define ClintToStr xclint2str_l // Переопределение функции xclint2str_l
int main(int argc, char* argv[])
{
CLINT a,b,c,m; // Обьявление объектов CLINT
// Инициализаация объектов CLINT строкой 16-х цифр
char *sa =new char;sa="11";
str2clint_l (a,sa,10);//Инициализация строкой
char *sb =new char;sb="31";
str2clint_l (b,sb,10);//Инициализация строкой
char *sm =new char;sm="12";
str2clint_l (m,sm,10);//Инициализация строкой
printf("a=%s\n",ClintToStr(a,10,1));
printf("b=%s\n",ClintToStr(b,10,1));
printf("m=%s\n",ClintToStr(m,10,1));
// Проверка сравнимости по модулю m
if( mequ_l ( a, b, m)) printf("a = b mod m= %s\n","YES");
else printf("a = b mod m= %s\n","NO");
//Сложение по модулю m
int Err=madd_l (a, b, c, m);
printf("Err= %d c=a+b mod m= %s\n",Err,ClintToStr(c,10,1));
// Модульное вычитание
Err= msub_l ( a, b, c, m);
printf("Err= %d c=a-b mod m= %s\n",Err,ClintToStr(c,10,1));
Модульное деление ( вычет по модулю )
mod_l (a, b, c,m);
printf(" Err= %d c=a/b mod a= %s\n",Err,ClintToStr(tem,10,1));
//Модульное деление переменной типа CLINT на переменную типа USHORT
//( вычет по модулю )
US=pow(2,5) ;
USHORT F= umod_l (a, US);
printf(" F=a mod (2*2*2*2*2) = %d\n",F);
getch();
return 0; }
// Модульное умножение
Err= mmul_l ( a, b, c, m);
printf("Err= %d c=a x b mod m= %s\n",Err,ClintToStr(c,10,1));
// Модульное возведение в квадрат
Err= msqr_l( a, c, m);
printf("Err= %d c=sqr(a)mod m= %s\n",Err,ClintToStr(c,10,1));
getch();
return 0;}