Деление с остатком
- 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 данное изменение не числится.