Деление с остатком
- 1 year ago
- 0
- 0
Деление c остатком — арифметическая операция , играющая большую роль в арифметике , теории чисел , алгебре и криптографии . Чаще всего эта операция определяется для целых или натуральных чисел следующим образом . Пусть и — целые числа, причём Деление с остатком («делимого») на («делитель») означает нахождение таких целых чисел и , что выполняется равенство:
Таким образом, результатами деления с остатком являются два целых числа: называется неполным частным от деления, а — остатком от деления . На остаток налагается дополнительное условие: то есть остаток от деления должен быть неотрицательным числом и по абсолютной величине меньше делителя . Это условие обеспечивает однозначность результатов деления с остатком для всех целых чисел, то есть существует единственное решение уравнения при заданных выше условиях. Если остаток равен нулю, говорят, что нацело делится на
Нахождение неполного частного также называют целочисленным делением , а нахождение остатка от деления называют взятием остатка или, неформально, делением по модулю (однако последнего термина стоит избегать, так как он может привести к путанице с делением в кольце или группе вычетов по аналогии со сложением или умножением по модулю ).
Операция деления с остатком может быть определена не только для целых чисел, но и для других математических объектов (например, для многочленов ), см. .
Оставаясь строго в рамках натуральных чисел , приходится различать деление с остатком и деление нацело, поскольку нулевой остаток не является натуральным числом; кроме того, неполное частное при делении меньшего числа на большее должно равняться нулю, что тоже выводит за рамки натуральных чисел. Все эти искусственные ограничения неоправданно усложняют формулировки, поэтому в источниках обычно либо рассматривается расширенный натуральный ряд , включающий ноль , либо теория сразу формулируется для целых чисел, как указано выше .
Для вычисления неполного частного от деления на положительное число следует разделить (в обычном смысле) на и округлить результат до ближайшего целого в меньшую сторону:
где полускобки обозначают взятие целой части . Значение неполного частного позволяет вычислить значение остатка по формуле:
Для отрицательного делителя нужно округлять частное в большую сторону:
Величина остатка может быть получена бинарной операцией «взятия остатка» от деления на , обозначаемой mod :
Не следует путать это обозначение с обозначением сравнения по модулю . Формула для влечёт выполнение сравнения:
однако обратная импликация , вообще говоря, неверна. А именно, это сравнение не подразумевает выполнения неравенства , необходимого для того, чтобы было остатком.
Язык |
Неполное
частное |
Остаток | Знак остатка |
---|---|---|---|
ActionScript |
%
|
Делимое | |
Ada |
mod
|
Делитель | |
rem
|
Делимое | ||
Бейсик |
\
|
MOD
|
Не определено |
Си (ISO 1990) |
/
|
%
|
Не определено |
Си (ISO 1999) |
/
|
%
|
Делимое |
C++ (ISO 2003) |
/
|
%
|
Не определено |
C++ (ISO 2011) |
/
|
%
|
Делимое |
C# |
/
|
%
|
Делимое |
ColdFusion |
MOD
|
Делимое | |
Common Lisp |
mod
|
Делитель | |
rem
|
Делимое | ||
D |
/
|
%
|
Делимое |
Delphi |
div
|
mod
|
Делимое |
//
|
\\
|
Делимое | |
Erlang |
div
|
rem
|
Делимое |
Euphoria |
remainder
|
Делимое | |
Microsoft Excel (англ.) |
QUOTIENT()
|
MOD()
|
Делитель |
Microsoft Excel (рус.) |
ЧАСТНОЕ()
|
ОСТАТ()
|
|
FileMaker |
Div()
|
Mod()
|
Делитель |
Fortran |
mod
|
Делимое | |
modulo
|
Делитель | ||
GML (Game Maker) |
div
|
mod
|
Делимое |
Go |
/
|
%
|
Делимое |
Haskell |
div
|
mod
|
Делитель |
quot
|
rem
|
Делимое | |
J |
|~
|
Делитель | |
Java |
/
|
%
|
Делимое |
Math.floorDiv
|
Math.floorMod
|
Делитель (1.8+) | |
JavaScript | .toFixed(0) |
%
|
Делимое |
Lua |
%
|
Делитель | |
Mathematica |
Quotient
|
Mod
|
Делитель |
MATLAB |
idivide(?, ?, 'floor')
|
mod
|
Делитель |
idivide
|
rem
|
Делимое | |
MySQL |
DIV
|
MOD
%
|
Делимое |
Oberon |
DIV
|
MOD
|
+ |
Objective Caml |
mod
|
Не определено | |
Pascal |
div
|
mod
|
Делимое |
Perl | Нет |
%
|
Делитель |
PHP | Нет |
%
|
Делимое |
PL/I |
mod
|
Делитель ( ANSI PL/I ) | |
Prolog (ISO 1995) |
mod
|
Делитель | |
PureBasic |
/
|
Mod
%
|
Делимое |
Python |
//
|
%
|
Делитель |
QBasic |
\
|
MOD
|
Делимое |
R | %/% |
%%
|
Делитель |
RPG |
%REM
|
Делимое | |
Ruby |
/
|
%
|
Делитель |
Scheme |
modulo
|
Делитель | |
modulo
|
Делитель | ||
rem
|
Делимое | ||
Tcl |
%
|
Делитель | |
Verilog (2001) |
%
|
Делимое | |
VHDL |
mod
|
Делитель | |
rem
|
Делимое | ||
Visual Basic |
\
|
Mod
|
Делимое |
Нахождение остатка от деления часто используется в компьютерной технике и телекоммуникационном оборудовании для создания контрольных чисел и получения случайных чисел в ограниченном диапазоне, например в конгруэнтном генераторе случайных чисел .
Обозначения операции взятия остатка в различных языках программирования представлены в таблице справа.
Например, в
Паскале
операция
mod
вычисляет остаток от деления, а операция
div
осуществляет целочисленное деление, при котором остаток от деления отбрасывается:
78 mod 33 = 12
78 div 33 = 2
Операция взятия остатка в языках программирования может возвращать отрицательный результат (для отрицательного делимого или делителя). Тут есть два варианта:
Если в языке есть оба типа остатков, каждому из них соответствует своя операция неполного частного. Обе операции имеют жизненный смысл.
n div 100
и
n mod 100
. Знак остатка совпадает со знаком делимого.
x div 16, y div 16
и
(x mod 16, y mod 16)
соответственно. Знак остатка совпадает со знаком делителя.
Операция
div
в
x86
/
x64
делит регистровую пару
rdx:rax
на любой другой регистр или число из памяти
. Неполное частное и остаток выходят по первому варианту — округляют к нулю.
Неполное частное можно вычислить через деление и взятие целой части: , где , в зависимости от задачи, может быть « полом » или усечением. Однако деление здесь получается дробное , которое намного медленнее целого. Такой алгоритм используется в языках, в которых нет целых типов (отдельные электронные таблицы , программируемые калькуляторы и математические программы), а также в скриптовых языках , в которых издержки интерпретации намного превышают издержки дробной арифметики ( Perl , PHP ).
При отсутствии команды
mod
остаток программируется как
.
Если положительно, а знак совпадает со знаком делимого, не определён или неизвестен, для нахождения минимального неотрицательного остатка можно воспользоваться формулой .
Неполное частное и неотрицательный остаток от деления на степень двойки — это битовый сдвиг (для чисел со знаком — арифметический) и .
Если два числа и (отличное от нуля ) относятся к множеству вещественных чисел , может быть поделено на без остатка, и при этом частное также является вещественным числом. Если же частное по условию должно быть целым числом , в этом случае остаток будет вещественным числом, то есть может оказаться дробным .
Формально:
Деление 7,9 на 2,1 с остатком даёт:
Гауссово число — это комплексное число вида , где — целые числа. Для них можно определить деление с остатком: любое гауссово число можно разделить с остатком на любое ненулевое гауссово число , то есть представить в виде:
где частное и остаток — гауссовы числа, причём Однако, в отличие от целых чисел, остаток от деления определяется неоднозначно. Например, можно разделить на тремя способами:
При делении с остатком двух многочленов и для однозначности результата вводится условие: степень многочлена-остатка должна быть строго меньше степени делителя:
/
operator is the algebraic quotient with any fractional part discarded. [This is often called «truncation toward zero».]
; в списке изменений 1999→TC1 и TC1→TC2 данное изменение не числится.
{{
citation
}}
: Википедия:Обслуживание CS1 (location) (
ссылка
)
.
«the binary % operator yields the remainder from the division of the first expression by the second. …. If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined»
.