summaryrefslogtreecommitdiff
path: root/man/ru/ipowm1_mod.3mpu
blob: bf0fd9c5a8233f70fcd0e952c399836b1b672807 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
.\" Copyright 2026 Andrew V.Kosteltsev (kx@radix-linux.su)
.\"
.\"
.TH ipowm1_mod 3  "September 14, 2026" "libmpu" "LibMPU Programmer's Manual"
.SH NAME
\fBipowm1_mod\fP \- мультипликативное обратное беззнакового целого числа по модулю
.SH SYNOPSIS
.nf
.B #include <libmpu.h>
.PP
.BI "void ipowm1_mod( mpu_int *" c ", mpu_int *" a ", mpu_int *" m ", int " nb " );"
.fi
.SH DESCRIPTION
Функция \fBipowm1_mod()\fP вычисляет мультипликативное обратное по модулю
.sp
.nf
        c = a^(-1) mod m
.fi
.sp
для беззнаковых целых чисел. Результат \fBc\fP существует при \fBgcd(a, m) == 1\fP и
удовлетворяет условию
.sp
.nf
        (a * c) mod m = 1.
.fi
.sp
Для вычисления используется расширенный алгоритм Евклида. Содержимое памяти по адресам
\fBa\fP и \fBm\fP не изменяется. Параметр \fBnb\fP определяет размер всех операндов в байтах.
.PP
Если \fBgcd(a, m) != 1\fP, мультипликативного обратного не существует; в этом случае
\fBc\fP обнуляется и выставляется флаг \fBZ\fP. При \fBm == 1\fP функция также возвращает
ноль и выставляет \fBZ\fP.
.PP
Если \fBm\fP равно нулю, значение по адресу \fBc\fP не изменяется, выставляется флаг
\fBV\fP (Invalid operation), а переменной \fB__mpu_integer_error_no\fP присваивается
значение \fB__I_ENUMBER__\fP.
.sp
.SH EXAMPLES
.nf
.sp
#include <libmpu.h>
#include <stdio.h>

int main( void )
{
  mpu_int1024_t  c, a, m;
  int            nb = NB_I1024;
  __mpu_char8_t  s[4096];

  __mpu_init();

  iatoui( a,  "89", nb );
  iatoui( m, "456", nb );

  ipowm1_mod( c, a, m, nb );
  iuitoa( s, c, RADIX_DEC, LOWERCASE, nb );
  printf( "c = %s;\\n", s ); /* c = 41; */

  __mpu_free_context();

  return( 0 );
}
.fi
.sp
.SH SEE ALSO
.BR iadd(3),
.BR isub(3),
.BR iadc(3),
.BR isbb(3),
.BR ineg(3),
.BR inot(3),
.BR iand(3),
.BR itest(3),
.BR icmp(3),
.BR ior(3),
.BR ixor(3),
.BR iinc(3),
.BR idec(3),
.BR ixchg(3),
.BR icpy(3),
.BR icvt(3),
.BR imul(3),
.BR ismul(3),
.BR idiv(3),
.BR isdiv(3),
.BR iatoi(3),
.BR iatoui(3),
.BR iitoa(3),
.BR iuitoa(3),
.BR _int_digs(3),
.BR ibits_len(3),
.BR igcd(3),
.BR ilcm(3),
.BR imod(3),
.BR imul_mod(3),
.BR ipow_mod(3),
.BR ipowm1_mod(3),
.BR shifts(3),
.BR shifts\-n(3),
.BR circular\-shifts(3),
.BR circular\-shifts\-n(3),
.BR integer\-flags(3),
.BR real\-flags(3),
.BR libmpu(7).