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
105
|
.\" Copyright 2026 Andrew V.Kosteltsev (kx@radix-linux.su)
.\"
.\"
.TH ilcm 3 "September 14, 2026" "libmpu" "LibMPU Programmer's Manual"
.SH NAME
\fBilcm\fP \- наименьшее общее кратное беззнаковых целых чисел
.SH SYNOPSIS
.nf
.B #include <libmpu.h>
.PP
.BI "void ilcm( mpu_int *" c ", mpu_int *" a ", mpu_int *" b ", int " nb " );"
.fi
.SH DESCRIPTION
Функция \fBilcm()\fP вычисляет наименьшее общее кратное (НОК) беззнаковых целых чисел,
расположенных по адресам \fBa\fP и \fBb\fP, и размещает результат по адресу \fBc\fP.
Вычисление выполняется по формуле
.sp
.nf
lcm(a, b) = (a / gcd(a, b)) * b
.fi
.sp
что позволяет не формировать произведение \fBa * b\fP до деления на НОД. Содержимое
памяти по адресам \fBa\fP и \fBb\fP не изменяется. Параметр \fBnb\fP определяет размер
всех операндов в байтах.
.PP
Принята следующая семантика для нулевых операндов:
.nf
.sp
lcm(0, b) = 0
lcm(a, 0) = 0
lcm(0, 0) = 0
.fi
.PP
Если математическое значение НОК не помещается в \fBnb\fP байтов, по адресу \fBc\fP
сохраняются младшие \fBnb\fP байтов результата и выставляется флаг \fBO\fP (Overflow).
Флаг \fBZ\fP указывает на нулевой результат. Флаги \fBP\fP и \fBS\fP выставляются в
соответствии с сохранённым результатом там, где они определены; флаг \fBP\fP определён
только для операций над одно- и двухбайтовыми целыми числами.
.sp
.SH EXAMPLES
.nf
.sp
#include <libmpu.h>
#include <stdio.h>
int main( void )
{
mpu_int1024_t c, a, b;
int nb = NB_I1024;
__mpu_char8_t s[4096];
__mpu_init();
iatoui( a, "12", nb );
iatoui( b, "18", nb );
ilcm( c, a, b, nb );
iuitoa( s, c, RADIX_DEC, LOWERCASE, nb );
printf( "c = %s;\\n", s ); /* c = 36; */
__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 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).
|