Modulo operation - wikipedia Modulo operation Quotient ( q ) and remainder ( r ) as functions of dividend ( a ), using different algorithms In computing, the modulo operation finds the remainder after division of one number by another ( sometimes called modulus ). Given two positive numbers, a ( the dividend ) and n ( the divisor ), a modulo n ( abbreviated as a mod n ) is the remainder of the Euclidean division of a by n. For example, the expression `` 5 mod 2 '' would evaluate to 1 because 5 divided by 2 leaves a quotient of 2 and a remainder of 1, while `` 9 mod 3 '' would evaluate to 0 because the division of 9 by 3 has a quotient of 3 and leaves a remainder of 0 ; there is nothing to subtract from 9 after multiplying 3 times 3. ( Note that doing the division with a calculator will not show the result referred to here by this operation ; the quotient will be expressed as a decimal fraction. ) Although typically performed with a and n both being integers, many computing systems allow other types of numeric operands. The range of numbers for an integer modulo of n is 0 to n − 1. ( a mod 1 is always 0 ; a mod 0 is undefined, possibly resulting in a division by zero error in programming languages. ) See modular arithmetic for an older and related convention applied in number theory. When either a or n is negative, the naive definition breaks down and programming languages differ in how these values are defined. Contents 1 Remainder calculation for the modulo operation 2 Common pitfalls 3 Notation 4 Performance issues 5 Equivalencies 6 See also 7 Notes 8 References Remainder calculation for the modulo operation Integer modulo operators in various programming languages Language Operator Result has same sign as ABAP MOD Nonnegative always ActionScript % Dividend Ada mod Divisor rem Dividend ALGOL 68 ÷ ×, mod Nonnegative always AMPL mod Dividend APL Divisor AppleScript mod Dividend AutoLISP ( rem dn ) Remainder AWK % Dividend BASIC Mod Undefined bash % Dividend bc % Dividend C ( ISO 1990 ) % Implementation - defined div Dividend C++ ( ISO 1998 ) % Implementation - defined div Dividend C ( ISO 1999 ) %, div Dividend C++ ( ISO 2011 ) %, div Dividend C# % Dividend Clarion % Dividend Clojure mod Divisor rem Dividend COBOL FUNCTION MOD Divisor CoffeeScript % Dividend % % Divisor ColdFusion %, MOD Dividend Common Lisp mod Divisor rem Dividend Construct 2 % % Dividend Dart % Nonnegative always remainder ( ) Dividend Eiffel Dividend Erlang rem Dividend Euphoria mod Divisor remainder Dividend F# % Dividend FileMaker Mod Divisor Forth mod implementation defined Fortran mod Dividend modulo Divisor Frink mod Divisor GameMaker : Studio ( GML ) mod, % Dividend GDScript % Dividend Go % Dividend Haskell mod Divisor rem Dividend Haxe % Dividend Kotlin % Dividend Divisor Java % Dividend Math. floorMod Divisor JavaScript % Dividend Julia mod Divisor %, rem Dividend LabVIEW mod Dividend LibreOffice = MOD ( ) Divisor Lua 5 % Divisor Lua 4 mod ( x, y ) Divisor Liberty BASIC MOD Dividend Mathcad mod ( x, y ) Divisor Maple e mod m Nonnegative always Mathematica Mod ( a, b ) Divisor MATLAB mod Divisor rem Dividend Maxima mod Divisor remainder Dividend Maya Embedded Language % Dividend Microsoft Excel = MOD ( ) Divisor Minitab MOD Divisor mksh % Dividend Modula - 2 MOD Divisor REM Dividend MUMPS # Divisor Netwide Assembler ( NASM, NASMX ) % Modulo operator unsigned % % Modulo operator signed Nim mod Dividend Oberon MOD Divisor Object Pascal, Delphi mod Dividend OCaml mod Dividend Occam Dividend Pascal ( ISO - 7185 and - 10206 ) mod Nonnegative always Programming Code Advanced ( PCA ) \Undefined Perl % Divisor PHP % Dividend PIC BASIC Pro Dividend PL / I mod Divisor ( ANSI PL / I ) PowerShell % Dividend Programming Code ( PRC ) MATH. OP - ' MOD ; ( ) ' Undefined Progress modulo Dividend Prolog ( ISO 1995 ) mod Divisor rem Dividend PureBasic %, Mod ( x, y ) Dividend Python % Divisor math. fmod Dividend Q # % Dividend Racket remainder Dividend RealBasic MOD Dividend % % Divisor Rexx / / Dividend RPG % REM Dividend Ruby %, modulo ( ) Divisor remainder ( ) Dividend Rust % Dividend SAS MOD Dividend Scala % Dividend Scheme modulo Divisor remainder Dividend Scheme R RS mod Nonnegative always mod0 Nearest to zero Seed7 mod Divisor rem Dividend SenseTalk modulo Divisor rem Dividend Smalltalk Divisor rem : Dividend Snap ! mod Divisor Spin / / Divisor SQL ( SQL : 1999 ) mod ( x, y ) Dividend SQL ( SQL : 2012 ) % Dividend Standard ML mod Divisor Int. rem Dividend Stata mod ( x, y ) Nonnegative always Swift % Dividend Tcl % Divisor Torque % Dividend Turing mod Divisor Verilog ( 2001 ) % Dividend VHDL mod Divisor rem Dividend VimL % Dividend Visual Basic Mod Dividend WebAssembly i32. rem_s, i64. rem_s Dividend x86 assembly IDIV Dividend XBase++ % Dividend Mod ( ) Divisor Z3 theorem prover div, mod Nonnegative always Floating - point modulo operators in various programming languages Language Operator Result has same sign as ABAP MOD Nonnegative always C ( ISO 1990 ) fmod Dividend C ( ISO 1999 ) fmod Dividend remainder Nearest to zero C++ ( ISO 1998 ) std : : fmod Dividend C++ ( ISO 2011 ) std : : fmod Dividend std : : remainder Nearest to zero C# % Dividend Common Lisp mod Divisor rem Dividend % Dividend Dart % Nonnegative always remainder ( ) Dividend F# % Dividend Fortran mod Dividend modulo Divisor Go math. Mod Dividend Haskell ( GHC ) Data. Fixed. mod ' Divisor Java % Dividend JavaScript % Dividend LabVIEW mod Dividend Microsoft Excel = MOD ( ) Divisor OCaml mod_float Dividend Perl POSIX : : fmod Dividend Perl6 % Divisor PHP fmod Dividend Python % Divisor math. fmod Dividend Rexx / / Dividend Ruby %, modulo ( ) Divisor remainder ( ) Dividend Scheme R RS flmod Nonnegative always flmod0 Nearest to zero Standard ML Real. rem Dividend Swift truncatingRemainder ( dividingBy :) Dividend XBase++ % Dividend Mod ( ) Divisor In mathematics, the result of the modulo operation is the remainder of the Euclidean division. However, other conventions are possible. Computers and calculators have various ways of storing and representing numbers ; thus their definition of the modulo operation depends on the programming language or the underlying hardware. In nearly all computing systems, the quotient q and the remainder r of a divided by n satisfy q ∈ Z a = n q + r r < n ( displaystyle ( \begin ( aligned ) q , & in mathbb ( Z ) a , & = nq + r \r , & < n end ( aligned ) ) ) ( 1 ) However, this still leaves a sign ambiguity if the remainder is nonzero : two possible choices for the remainder occur, one negative and the other positive, and two possible choices for the quotient occur. Usually, in number theory, the positive remainder is always chosen, but programming languages choose depending on the language and the signs of a or n. Standard Pascal and ALGOL 68 give a positive remainder ( or 0 ) even for negative divisors, and some programming languages, such as C90, leave it to the implementation when either of n or a is negative. See the table for details. a modulo 0 is undefined in most systems, although some do define it as a. Many implementations use truncated division, where the quotient is defined by truncation q = trunc ( a / n ) and thus according to equation ( 1 ) the remainder would have same sign as the dividend. The quotient is rounded towards zero : equal to the first integer in the direction of zero from the exact rational quotient. r = a − n trunc ⁡ ( a n ) ( displaystyle r = a-n operatorname ( trunc ) left ( ( \frac ( a ) ( n ) ) \right ) ) Donald Knuth described floored division where the quotient is defined by the floor function q = ⌊ a / n ⌋ and thus according to equation ( 1 ) the remainder would have the same sign as the divisor. Due to the floor function, the quotient is always rounded downwards, even if it is already negative. r = a − n ⌊ a n ⌋ ( displaystyle r = a-n left lfloor ( \frac ( a ) ( n ) ) \right \rfloor ) Raymond T. Boute describes the Euclidean definition in which the remainder is nonnegative always, 0 ≤ r, and is thus consistent with the Euclidean division algorithm. In this case, n > 0 ⇒ q = ⌊ a n ⌋ ( displaystyle n > 0 Rightarrow q = left lfloor ( \frac ( a ) ( n ) ) \right \rfloor ) n < 0 ⇒ q = ⌈ a n ⌉ ( displaystyle n < 0 Rightarrow q = left lceil ( \frac ( a ) ( n ) ) \right \rceil ) or equivalently q = sgn ⁡ ( n ) ⌊ a n ⌋ ( displaystyle q = operatorname ( sgn ) ( n ) left lfloor ( \frac ( a ) ( left n \right ) ) \right \rfloor ) where sgn is the sign function, and thus r = a − n ⌊ a n ⌋ ( displaystyle r = a - n left lfloor ( \frac ( a ) ( left n \right ) ) \right \rfloor ) Common Lisp also defines round - division and ceiling - division where the quotient is given by q = round ( a / n ) and q = ⌈ a / n ⌉ respectively. IEEE 754 defines a remainder function where the quotient is a / n rounded according to the round to nearest convention. Thus, the sign of the remainder is chosen to be nearest to zero. As described by Leijen, Boute argues that Euclidean division is superior to the other ones in terms of regularity and useful mathematical properties, although floored division, promoted by Knuth, is also a good definition. Despite its widespread use, truncated division is shown to be inferior to the other definitions. -- Daan Leijen, Division and Modulus for Computer Scientists However, Boute concentrates on the properties of the modulo operation itself and does not rate the fact that the truncated division shows the symmetry ( - a ) div n = - ( a div n ) and a div ( - n ) = - ( a div n ), which is similar to the ordinary division. As neither floor division nor Euclidean division offer this symmetry, Boute 's judgement is at least incomplete. Common pitfalls When the result of a modulo operation has the sign of the dividend, it can lead to surprising mistakes. For example, to test if an integer is odd, one might be inclined to test if the remainder by 2 is equal to 1 : bool is_odd ( int n ) ( return n % 2 = = 1 ; ) But in a language where modulo has the sign of the dividend, that is incorrect, because when n ( the dividend ) is negative and odd, n mod 2 returns − 1, and the function returns false. One correct alternative is to test that it is not 0 ( because remainder 0 is the same regardless of the signs ) : bool is_odd ( int n ) ( return n % 2 ! = 0 ; ) Or, by understanding in the first place that for any odd number, the modulo remainder may be either 1 or − 1 : bool is_odd ( int n ) ( return n % 2 = = 1 n % 2 = = - 1 ; ) Notation This section is about the binary mod operation. For the ( mod m ) notation, see congruence relation. Some calculators have a mod ( ) function button, and many programming languages have a similar function, expressed as mod ( a, n ), for example. Some also support expressions that use `` % '', `` mod '', or `` Mod '' as a modulo or remainder operator, such as a % n or a mod n or equivalent, for environments lacking a mod ( ) function ( note that ' int ' inherently produces the truncated value of a / n ) a - ( n * int ( a / n ) ) Performance issues Modulo operations might be implemented such that a division with a remainder is calculated each time. For special cases, on some hardware, faster alternatives exist. For example, the modulo of powers of 2 can alternatively be expressed as a bitwise AND operation : x % 2 = = x & ( 2 - 1 ) Examples ( assuming x is a positive integer ) : x % 2 = = x & 1 x % 4 = = x & 3 x % 8 = = x & 7 In devices and software that implement bitwise operations more efficiently than modulo, these alternative forms can result in faster calculations. Optimizing compilers may recognize expressions of the form expression % constant where constant is a power of two and automatically implement them as expression & ( constant - 1 ). This can allow writing clearer code without compromising performance. This optimization is not possible for languages in which the result of the modulo operation has the sign of the dividend ( including C ), unless the dividend is of an unsigned integer type. This is because, if the dividend is negative, the modulo will be negative, whereas expression & ( constant - 1 ) will always be positive. Equivalencies Some modulo operations can be factored or expanded similarly to other mathematical operations. This may be useful in cryptography proofs, such as the Diffie -- Hellman key exchange. Identity : ( a mod n ) mod n = a mod n. n mod n = 0 for all positive integer values of x. If p is a prime number which is not a divisor of b, then ab mod p = a mod p, due to Fermat 's little theorem. Inverse : ( ( − a mod n ) + ( a mod n ) ) mod n = 0. b mod n denotes the modular multiplicative inverse, which is defined if and only if b and n are relatively prime, which is the case when the left hand side is defined : ( ( b mod n ) ( b mod n ) ) mod n = 1. Distributive : ( a + b ) mod n = ( ( a mod n ) + ( b mod n ) ) mod n. ab mod n = ( ( a mod n ) ( b mod n ) ) mod n. d mod ( abc ) = ( d mod a ) + a ( ( d a ) mod b ) + ab ( ( d a \b ) mod c ), where is the operator for the quotient from Euclidean division. c mod ( a + b ) = ( c mod a ) + ( bc ( a+b ) ) mod b - ( bc ( a + b ) ) mod a. Division ( definition ) : a / b mod n = ( ( a mod n ) ( b mod n ) ) mod n, when the right hand side is defined ( that is when b and n are coprime ). Undefined otherwise. Inverse multiplication : ( ( ab mod n ) ( b mod n ) ) mod n = a mod n. See also Modulo ( disambiguation ) and modulo ( jargon ) -- many uses of the word modulo, all of which grew out of Carl F. Gauss 's introduction of modular arithmetic in 1801. Modular exponentiation Notes ^ Perl usually uses arithmetic modulo operator that is machine - independent. For examples and exceptions, see the Perl documentation on multiplicative operators. ^ Mathematically, these two choices are but two of the infinite number of choices available for the inequality satisfied by a remainder. ^ Divisor must be positive, otherwise undefined. ^ As implemented in ACUCOBOL, Micro Focus COBOL, and possible others. ^ ^ Argument order reverses, i.e., α ω computes ω mod α ( displaystyle omega ( \bmod ( alpha ) ) ), the remainder when dividing ω by α. References Jump up ^ `` ISO / IEC 14882 : 2003 : Programming languages -- C + + ''. 5.6. 4 : International Organization for Standardization ( ISO ), International Electrotechnical Commission ( IEC ). 2003... `` 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 ''. Jump up ^ open-std.org, section 6.5. 5 Jump up ^ CoffeeScript operators Jump up ^ `` Expressions ''. D Programming Language 2.0. Digital Mars. Retrieved 29 July 2010. Jump up ^ QuantumWriter. `` Expressions ''. docs.microsoft.com. Retrieved 2018 - 07 - 11. ^ Jump up to : r6rs.org Jump up ^ `` ISO / IEC 9899 : 1990 : Programming languages -- C ''. 7.5. 6.4 : ISO, IEC. 1990. `` The fmod function returns the value x - i * y, for some integer i such that, if y is nonzero, the result as the same sign as x and magnitude less than the magnitude of y. ''. Jump up ^ Knuth, Donald. E. ( 1972 ). The Art of Computer Programming. Addison - Wesley. Jump up ^ Boute, Raymond T. ( April 1992 ). `` The Euclidean definition of the functions div and mod ''. ACM Transactions on Programming Languages and Systems. ACM Press ( New York, NY, USA ). 14 ( 2 ) : 127 -- 144. doi : 10.1145 / 128861.128862. Jump up ^ Leijen, Daan ( December 3, 2001 ). `` Division and Modulus for Computer Scientists '' ( PDF ). Retrieved 2014 - 12 - 25. Jump up ^ Horvath, Adam ( July 5, 2012 ). `` Faster division and modulo operation - the power of two ''. Jump up ^ Perl documentation Retrieved from `` https://en.wikipedia.org/w/index.php?title=Modulo_operation&oldid=850161688 '' Categories : Computer arithmetic Operators ( programming ) Modular arithmetic Binary operations Hidden categories : All articles with unsourced statements Articles with unsourced statements from January 2018 All articles that may contain original research Articles that may contain original research from January 2018 Articles with example C++ code Talk Contents About Wikipedia Беларуская Català Dansk Deutsch Español فارسی Français Bahasa Indonesia Íslenska Italiano 日本 語 Norsk Polski Português Română Русский Simple English Slovenščina Српски / srpski Svenska Türkçe Українська Tiếng Việt 粵語 中文 16 more Edit links This page was last edited on 14 July 2018, at 01 : 46 ( UTC ). Text is available under the Creative Commons Attribution - ShareAlike License ; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia ® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization. About Wikipedia

Question: what is the purpose of the modulus operator
Answer: finds the remainder after division of one number by another (sometimes called modulus)