Thuật toán có thể nói cái gì đó như:
x ≡ 1 (mod N) # x is congruent to 1 (modulo N)
Các (mod N)
và equals triple ký biểu thị rằng bạn đang làm việc với số học modula, không số học bình thường. Hãy nghĩ về nó như bàn tay của một chiếc đồng hồ. Trong số học mô-đun, x ≡ 1
có nghĩa là x
và 1
thuộc về cùng một residue class. Nếu bạn có đồng hồ với các bộ phận giờ N
, hãy xoay tay 1
thời gian hoặc x
lần sẽ mang bàn tay đến cùng một vị trí kết thúc.
Đối với trường hợp cụ thể của bạn, x ≡ 1 (mod N)
có thể được biểu diễn dưới dạng x % N === 1
trong JavaScript nếu x
là không bao giờ tiêu cực. Nếu không, sự bình đẳng của bạn sẽ không giữ mặc dù nó cần: ví dụ: -1 ≡ 1 (mod 2)
nhưng (-1) % 2 === -1
, không bằng 1
mặc dù chúng "bằng nhau" trong ý nghĩa số học mô-đun.
Nếu bạn mong đợi x
là tiêu cực, bạn chỉ có thể sắp xếp lại các mối quan hệ tương đẳng:
x ≡ 1 (mod N)
⇒ x - 1 ≡ 0 (mod N)
x - 1
là đồng dư với 0
có nghĩa là nó chia hết cho N
chính nó, vì vậy bạn có thể sử dụng toán tử modulo một cách an toàn:
if ((x - 1) % N === 0) {
...
}
"1 modulo bất cứ điều gì (hoặc 1% N) là 1" - trừ khi N là 1, trong trường hợp đó kết quả bằng không. –
Điều quan trọng cần hiểu là trong ký hiệu toán học, '(mod n)' áp dụng cho * cả hai mặt của một biểu thức, thậm chí mặc dù nó thường chỉ được viết ở bên phải (xem [Nhầm lẫn về ký hiệu mô-đun] (http://math.stackexchange.com/questions/78367/confused-about-modular-notations)). Vì vậy, tắt câu trả lời của @ Blender, biểu thức 'a ≡ 1 (mod N) 'phải được đọc là" 'a ≡ 1' khi hệ thống là lấy' modulo N' ", hoặc' a% N == 1 % N' (hoặc chỉ 'a% N == 1', vì' 1% N' luôn bằng 1). – sevko