mod là gì trong toán học

articlewriting1
Thương số ( q ) và số dư ( r ) theo những hàm của số bị chia ( a ), bằng cách dùng những thuật toán khác nhau
Đang xem : Mod là gì trong toán học

Trong điện toán, phép toán modulo là phép toán tìm số dư của phép chia 2 số (đôi khi được gọi là modulus).

Cho hai số dương, (số bị chia) a và (số chia) n, a modulo n (mister-map.comết tắt là a mod n ) là số dư của phép chia có dư Euclid của a cho n. Ví dụ, biểu thức “5 mod 2” bằng 1 vì 5 chia cho 2 có thương số là 2 là số dư là 1, trong khi “9 mod 3” bằng 0 do 9 chia 3 có thương số là 3 và số dư 0; không còn gì trong phép trừ của 9 cho 3 nhân 3. (Lưu ý rằng thực hiện phép chia bằng máy tính cầm tay sẽ không hiển thị kết quả giống như phép toán này; thương số sẽ được biểu diễn dưới dạng phần thập phân.)

Bạn đang đọc: mod là gì trong toán học

Mặc dù thường được triển khai khi a và n đều là số nguyên, nhiều hệ giám sát được cho phép sử dụng những kiểu khác của toán học bằng số. Giới hạn của một modulo nguyên của n là tù 0 đến n − 1. ( a mod 1 luôn bằng 0 ; a mod 0 là không xác lập, hoàn toàn có thể trả về lỗi chia cho số 0 trong nhiều ngôn từ lập trình. ) Xem số học mô-đun để tìm những quy ước cũ hơn và tương quan được vận dụng trong triết lý số .
Khi hoặc a hoặc n là số âm, định nghĩa cơ bản bị phá vỡ và những ngôn từ lập trình khác nhau trong mister-map. comệc định nghĩa những tác dụng này .

Tính toán phần dư trong phép toán modulo

Toán tử modulo của số nguyên trong nhiều ngôn từ lập trình khác nhau Ngôn ngữ Toán tử Kết quả có cùng dấu với ABAP MOD Luôn không âm ActionScript % Số bị chia Ada mod Số chia rem Số bị chia ALGOL 68 ÷ ×, mod Luôn không âm AMPL mod Số bị chia APL | Số chia AppleScript mod Số bị chia AutoLISP ( rem d n ) Số dư AWK % Số bị chia BASIC Mod Không xác lập bash % Số bị chia bc % Số bị chia C ( ISO 1990 ) % Định nghĩa tùy thuộc thiết lập div ngôn từ lập trình C + + ( ISO 1998 ) % Định nghĩa tùy thuộc thiết lập [ 1 ] div Số bị chia C ( ISO 1999 ) %, div Số bị chia [ 2 ] C + + ( ISO 2011 ) %, div Số bị chia C # % Số bị chia Clarion % Số bị chia Clojure mod Số chia rem Số bị chia COBOL FUNCTION MOD Số chia CoffeeScript % Số bị chia % % Số chia [ 3 ] ColdFusion %, MOD Số bị chia Common Lisp mod Số chia rem Số bị chia Construct 2 % D % Số bị chia [ 4 ] Dart % Luôn không âm remainder ( ) Số bị chia Eiffel \ Erlang rem Số bị chia Euphoria mod Số chia remainder Số bị chia F # % Số bị chia FileMaker Mod Số chia Forth mod tùy thuộc vào thiết lập Fortran mod Số bị chia modulo Số chia Frink mod Số chia GameMaker : Studio ( GML ) mod, % Số bị chia GDScript % Số bị chia Go % Số bị chia Haskell mod Số chia rem Số bị chia Haxe % Số bị chia Kotlin % Số bị chia J | Số chia Java % Số bị chia Math. floorMod Số chia JavaScript % Số bị chia Julia mod Số chia rem Số bị chia Labmister-map. comEW mod Số bị chia LibreOffice = MOD ( ) Số chia Lua 5 % Số chia Lua 4 mod ( x, y ) Số chia Liberty BASIC MOD Số bị chia Mathcad mod ( x, y ) Số chia Maple e mod m Luôn không âm Mathematica Mod Số chia MATLAB mod Số chia rem Số bị chia Maxima mod Số chia remainder Số bị chia Maya Embedded Language % Số bị chia Microsoft Excel = MOD ( ) Số chia Minitab MOD Số chia mksh % Số bị chia Modula-2 MOD Số chia REM Số bị chia MUMPS # Số chia Netwide Assembler ( NASM, NASMX ) % toán tử modulo không dấu % % toán tử modulo có dấu Oberon MOD Số chia Object Pascal, Delphi mod Số bị chia OCaml mod Số bị chia Occam Số bị chia Pascal ( ISO-7185 and – 10206 ) mod Luôn không âm Perl % Số chia PHP % Số bị chia PIC BASIC Pro \ Số bị chia PL / I mod Số chia ( ANSI PL / I ) PowerShell % Số bị chia Progress modulo Số bị chia Prolog ( ISO 1995 ) mod Số chia rem Số bị chia PureBasic %, Mod ( x, y ) Số bị chia Python % Số chia math.fmod Số bị chia Racket remainder Số bị chia RealBasic MOD Số bị chia R % % Số chia Rexx / / Số bị chia RPG % REM Số bị chia Ruby %, modulo ( ) Số chia remainder ( ) Số bị chia Rust % Số bị chia Scala % Số bị chia Scheme modulo Số chia remainder Số bị chia Scheme R6RS mod Luôn không âm [ 5 ] mod0 Nearest to zero [ 5 ] Seed7 mod Số chia rem Số bị chia SenseTalk modulo Số chia rem Số bị chia Smalltalk \ Số chia rem : Số bị chia Spin / / Số chia SQL ( SQL : 1999 ) mod ( x, y ) Số bị chia SQL ( SQL : 2012 ) % Số bị chia Standard ML mod Số chia Int. rem Số bị chia Stata mod ( x, y ) Luôn không âm Swift % Số bị chia Tcl % Số chia Torque % Số bị chia Turing mod Số chia Verilog ( 2001 ) % Số bị chia VHDL mod Số chia rem Số bị chia mister-map. commL % Số bị chia mister-map.comsual Basic Mod Số bị chia x86 assembly IDIV Số bị chia XBase + + % Số bị chia Mod ( ) Số chia Z3 theorem prover div, mod Luôn không âm Toán tử modulo của số chấm động trong nhiều ngôn từ lập trình Ngôn ngữ Toán tử Kết quả có cùng dấu với ABAP MOD Luôn không âm C ( ISO 1990 ) fmod Số bị chia [ 6 ] C ( ISO 1999 ) fmod Số bị chia remainder Gần với số 0 C + + ( ISO 1998 ) std :: fmod Số bị chia C + + ( ISO 2011 ) std :: fmod Số bị chia std :: remainder Gần với số 0 C # % Số bị chia Common Lisp mod Số chia rem Số bị chia D % Số bị chia Dart % Luôn không âm remainder ( ) Số bị chia F # % Số bị chia Fortran mod Số bị chia modulo Số chia Go math. Mod Số bị chia Haskell ( GHC ) Data. Fixed. mod ” Số chia Java % Số bị chia JavaScript % Số bị chia Labmister-map. comEW mod Số bị chia Microsoft Excel = MOD ( ) Số chia OCaml mod_float Số bị chia Perl POSIX :: fmod Số bị chia Perl6 % Số chia PHP fmod Số bị chia Python % Số chia math.fmod Số bị chia Rexx / / Số bị chia Ruby %, modulo ( ) Số chia remainder ( ) Số bị chia Scheme R6RS flmod Luôn không âm flmod0 Gần với số 0 Standard ML Real. rem Số bị chia Swift truncatingRemainder ( dimister-map. comdingBy 🙂 Số bị chia XBase + + % Số bị chia Mod ( ) Số chia
Trong toán học, hiệu quả của phép toán modulo là số dư của phép chia có dư. Tuy vậy những quy ước khác vẫn sống sót. Máy mister-map.com tính và máy tính có nhiều cách khác nhau để tàng trữ và đại diện thay mặt cho những số ; do đó định nghĩa của chúng về phép toán modulo nhờ vào vào ngôn từ lập trình hoặc phần cứng máy tính bên dưới cơ bản .
Trong hầu hết những mạng lưới hệ thống máy tính, thương số q và số dư r của phép chia a cho n thỏa mãn nhu cầu
q ∈ Z a = n q + r | r |

(1 )

Tuy nhiên, vẫn còn sự nhập nhằng về dấu nếu số dư khác không : hai lựa chọn hoàn toàn có thể cho số dư xảy ra, một âm và một dương, và hai lựa chọn cho thương số xảy ra. Trong triết lý số, thường thì số dư dương luôn được chọn, nhưng lựa chọn của những ngôn từ lập trình tùy thuộc vào ngôn từ và dấu của a hoặc n. Ngôn ngữ Pascal và ALGOL 68 tiêu chuẩn chọn số dư dương ( hoặc 0 ) kể cả khi số chia là những số âm, so với một vài ngôn từ lập trình như C90 thì dấu tùy thuộc vào setup khi hoặc n hoặc a là số âm. Xem bảng để biết chi tiết cụ thể. a modulo 0 là không xác lập trong hầu hết những mạng lưới hệ thống, mặc dầu 1 số ít mạng lưới hệ thống định nghĩa là a .

Nhiều cài đặt sử dụng phép chia rút gọn mà trong đó thương số được định nghĩa bởi hàm rút gọn q = trunc(a / n ) do đó theo phương trình (1) số dư sẽ có cùng dấu với số bị chia. Thương số được làm tròn về số không: bằng số nguyên đầu tiên có phần hướng tới không của thương số hữu tỉ. r = a − n trunc ⁡ ( a n ) left(}
ight)}

*

Donald Knuth[7] mô tả phép chia sàn trong đó thương số được định nghĩa bởi hàm floor q = ⌊a / n ⌋, do đó theo phương trình (1) số dư sẽ có cùng dấu với số chia. Do hàm floor, thương số luôn được làm tròn xuống kể cả khi nó là số âm. r = a − n ⌊ a n ⌋ }
ight
floor }

*

Raymond T. Boute[8] mô tả định nghĩa phép chia có dư trong đó số dư luôn không âm, 0 ≤ r, phù hợp với giải thuật phép chia có dư. Trong đó, n > 0 ⇒ q = ⌊ a n ⌋ }
ight
floor }

*

n ight
ceil }

*
hoặc tương tự

q = sgn ⁡ ( n ) ⌊ a | n | ⌋ (n)leftlfloor }
ight
floor }

*
với sgn là hàm sign, do đó

r = a − | n | ⌊ a | n | ⌋ }
ight
floor }

*
Ngôn ngữ Common Lisp cũng định nghĩa phép chia làm tròn và phép chia trần, trong đó thương số cho bởi q = round ( a / n ) và q = ⌈ a / n ⌉ tương ứng. IEEE 754 định nghĩa hàm số dư trong đó thương số là a / n được làm tròn dựa trên quy ước làm tròn đến số gần nhất. Do vậy, dấu của số dư được chọn là gần với số 0 nhất .
Theo diễn đạt của Leijen ,
Boute argues that Euclidean dimister-map.comsion is superior to the other ones in terms of regularity and useful mathematical properties, although floored dimister-map.comsion, promoted by Knuth, is also a good definition. Despite its widespread use, truncated dimister-map.comsion is shown to be inferior to the other definitions. ( Tạm dịch : Boute lập luận rằng phép chia có dư là tiêu biểu vượt trội so với những phép chia khác về tính đều đặn và những thuộc tính toán học có ích, mặc dầu với phép chia sàn, được Knuth ủng hộ, cũng là một định nghĩa tốt. Tuy được sử dụng thoáng đãng, phép chia rút gọn được chứng tỏ kém hơn những định nghĩa khác. )

Xem thêm: Khi Những Cô Gái Trong Trắng Tv, Đi Tìm Bưởi Xịn !

Tuy nhiên, Boute tập trung chuyên sâu vào những đặc thù của chính phép toán modulo và không nhìn nhận thực sự là phép chia rút gọn ( tiếng Anh : truncated dimister-map.comsion ) cho thấy sự đối xứng của ( – a ) div n = – ( a div n ) và a div ( – n ) = – ( a div n ), mà cũng giống phép chia thường thì. Bởi vì cả hai phép chia sàn và phép chia có dư đều không có tính đối xứng này, phán đoán của Boute tối thiểu là không tổng lực. [ cần dẫn nguồn ]

Bài mister-map.comết hay đoạn này có thể chứa nghiên cứu chưa được công bố. Xin hãy cải thiện bài mister-map.comết bằng cách thêm vào các chú thích tham khảo. Những khẳng định chứa các nghiên cứu chưa công bố cần được loại bỏ. (Tháng 1 năm 2018 )

Các sai lầm thông thường

Nếu hiệu quả của phép chia modulo có dấu của số bị chia thì sẽ dẫn đến những sai lầm đáng tiếc đáng quá bất ngờ .
Ví dụ, để kiểm tra tính lẻ của một số nguyên, ta hoàn toàn có thể kiểm tra số dư khi chia cho có bằng 1 :

Khi ngôn từ lập trình có số dư có dấu của số bị chia, mister-map. comệc kiểm tra sẽ sai, do khi n ( số bị chia ) là số âm lẻ, n mod 2 trả về − 1, và hàm trả về false .
Có thể sửa lại sai lầm đáng tiếc đó bằng cách kiểm tra rằng hiệu quả khác 0 ( do số dư bằng 0 được xem xét như nhau bất kể dấu ) :

Hay là, bằng mister-map. comệc hiểu trước rằng với bất kể số lẻ nào, số dư modulo hoàn toàn có thể hoặc bằng 1 hoặc − 1 :
section này mister-map. comết về phép toán mod nhị phân. Đối với kí hiệu ( mod m ), xem Quan hệ đồng dư .
Một số máy tính cầm tay có nút của hàm mod ( ), và nhiều ngôn từ lập trình khác có hàm tương tự như, màn biểu diễn cho mod ( a, n ). Một vài ngôn từ tương hỗ những biễu thức mà dùng “ % ”, “ mod ”, hoặc “ Mod ” là toán tử modulo hoặc toán tử lấy số dư, ví dụ điển hình
a % n
hoặc
a mod n
hoặc tương tự cho thiên nhiên và môi trường thiếu hàm mod ( ) ( chú ý quan tâm rằng kiểu “ int ” vốn đã sinh ra giá trị rút gọn a / n )
a – ( n * int ( a / n ) )

Vấn đề hiệu suất

Phép toán modulo hoàn toàn có thể được thiết lập sao cho mỗi lần phép chia với số dư được tính. Đôi với nhu yếu đặc biệt quan trọng, trên vài phần cứng, sống sót những phép toán tương tự như nhưng nhanh hơn. Ví dụ, modulo cho lũy thừa của 2 hoàn toàn có thể biễu diễn tương tự bởi phép toán bitwise AND :
x % 2 n = = x và ( 2 n – 1 )
Ví dụ ( giả sử x là số nguyên dương ) :
x % 2 = = x và 1 x % 4 = = x và 3 x % 8 = = x và 7
Trong những thiết bị và ứng dụng mà setup toán tử bitwise hiệu suất cao hơn toán tử modulo, những dạng thay thế sửa chữa này hoàn toàn có thể dẫn đến đo lường và thống kê nhanh hơn. [ 10 ] Các trình biên dịch tối ưu hóa hoàn toàn có thể nhận diện những biểu thức có dạng expression % constant trong đó constant là lũy thừa của 2 và tự động hóa thiết lập chúng thành expression và ( constant-1 ). Điều này được cho phép mister-map. comết mã rõ ràng hơn mà không ảnh hưởng tác động đến hiệu suất. Cách tối ưu hóa này không vận dụng cho những ngôn từ mà tác dụng của phép toán modulo có cùng dẫu với số bị chia ( gồm có C ), trừ phi số bị chia là kiểu số nguyên không dấu. Bởi vì nếu số bị chia là số âm thì modulo sẽ là số âm trong khi expression và ( constant-1 ) sẽ luôn dương .

Tính tương đương

Một số phép toán modulo hoàn toàn có thể được lan rộng ra tựa như sang những phép toán toán học khác. Điều này có tính hữu dụng trong những chứng tỏ mật mã học, ví dụ điển hình trao đổi khóa Diffie-Hellman .
Phần tử đơn vị chức năng : ( a mod n ) mod n = a mod n. nx mod n = 0 với mọi số nguyên dương x. Nếu p là số nguyên tố không phải là ước số của b, thì abp − 1 mod p = a mod p, dựa theo định lý nhỏ Fermat. Phần tử hòn đảo : mod n = 0. b − 1 mod n kí hiệu thành phần hòn đảo modular, được định nghĩa khi và chỉ khi b và n là những số nguyên tố cùng nhau, khi vế trái xác lập : mod n = 1. Tính phân phối : ( a + b ) mod n = mod n. ab mod n = mod n. Phép chia ( định nghĩa ) : a / b mod n = mod n, khi vế phải xác lập ( là khi b và math | n } } là những số nguyên tố cùng nhau ). Các trường hợp còn lại là không xác lập. Phép nhân nghịch đảo : mod n = a mod n .

Xem thêm

Modulo ( Chống nhầm lẫn ) và modulo ( biệt ngữ ) – nhiều cách sử dụng từ modulo, tổng thể đều phát sinh từ cuốn sách Nhập môn số học mô đun ( tựa Anh : introduction of modular arithmetic ) của Carl F. Gauss năm 1801. Lũy thừa Modular

Chú thích

^ Perl sử dụng toán tử modulo số học mà độc lập với máy tính. Để biết thêm ví dụ và các ngoại lệ, xem tài liệu Perl về toán tử nhân.[11] ^ Trên phương diện toán học, hai lựa chọn này là hai trong số vô số lựa chọn có sẵn trong ^ Số chia phải là dương, nếu không không xác định. ^ Như được cài dặt trong ACUCOBOL, Micro Focus COBOL, và có thẻ là các ngôn ngữ khác ^ ^ Trật tự tham số đảo ngược, ví dụ, α|ω computes ω mod α }}

*
, số dư khi chia ω cho α .

Tham khảo

Xem thêm : Cho Nick Ngọc Rồng Online Mới Nhất 2019, Ch㺠Bã © Rá » “ Ng Online

^ “ISO/IEC 14882:2003: programming languages – C++”. 5.6.4: International Organization for Standardization (ISO), International Electrotechnical Commission (IEC). 2003. Chú thích journal cần |journal= (trợ giúp) Quản lý CS1: địa điểm (liên kết). “the binary % operator yields the remainder from the dimister-map.comsion 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”. ^ open-std.org, mục 6.5.5 ^ CoffeeScript operators ^ “Expressions”. D ngôn ngữ lập trình 2.0. Digital Mars. Truy cập ngày 29 tháng 7 năm 2010. ^ a ă r6rs.org ^ “ISO/IEC 9899:1990: programming languages – C”. 7.5.6.4: ISO, IEC. 1990. Chú thích journal cần |journal= (trợ giúp) Quản lý CS1: địa điểm (liên kết) “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.”. ^ Knuth, Donald. E. (1972). The Art of Computer Programming. Addison-Wesley. ^ Boute, Raymond T. (tháng 4 năm 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. ^ Leijen, Daan (Tháng 3 năm 2001). “Dimister-map.comsion and Modulus for Computer Scientists (Tạm dịch: Phép chia và Phép Modulus của các nhà khoa học máy tính)” (PDF). Truy cập ngày 25 tháng 12 năm 2014. ^ Horvath, Adam (ngày 5 tháng 7 năm 2012). “Faster dimister-map.comsion and modulo operation – the power of two”. ^ Perl documentation

0933.54.64.76