(合同算術)
http://www.sw.it.aoyama.ac.jp/2016/Math1/lecture13.html
© 2005-16 Martin J. Dürst Aoyama Gakuin University
About makeup classes: The material in the makeup class is part of the final exam. If you have another makeup class at the same time, please inform the teacher as soon as possible.
補講について: 補講の内容は期末試験の対象。補講が別の補講とぶつかる場合には事前に申し出ること。
[Additional past exam: 2015]
(hierarchy of objects)
Operations work on 8, 16, 32, 64 or more bits concurrently
b << n
in C and many other programming
languagesb
by n
positions
to the left (more significant direction)n
bits on the right are set to 0n
bits in b
disappearb << n
is equivalent to b
×2n89 << 5
⇒ 2848
)b >> n
in C and many other programming
languagesb
by n
positions
to the right (less significant direction)n
bits on the left are set to 0 or to the value of the
leftmost bit in b
, depending on programming lanugage and
data typen
bits in b
disappearb >> n
is equivalent to b /
2n (integer division)89 >> 3
⇒ 11
)a | m
a & ~m
a ^ m
a | (1<<n)
(rightmost bit is number 0)a & ~(1<<n)
(rightmost bit is number 0)a ^ (1<<n)
(rightmost bit is number 0)For many more advanced examples, see Hacker's Delight, Henry S. Warren, Jr., Addison-Wesley, 2003
Works the same as in decimal system:
Example (base 7):
Operand 1 | 3 | 6 | 5 | 1 | 2 | |
Operand 2 | 6 | 0 | 3 | 3 | 4 | |
carry | 1 | 1 | 1 | |||
sum in base 10 | 1 | 10 | 7 | 8 | 4 | 6 |
sum in base 7 | 1 | 13 | 10 | 11 | 4 | 6 |
Result | 1 | 3 | 0 | 1 | 4 | 6 |
0 | 1 | |
---|---|---|
0 | 0 | 1 |
1 | 1 | 10 |
^
b0,&
b0<<
1, repeat until c=0Example: a0 = 46 = 101110、b0 = 55 = 110111
x | 0 | 1 | 2 | 3 | |
ax (sx-1) | 101110 | 011001 | 1010101 | 1000101 | |
bx (cx-1<<1) | 110111 | 1001100 | 0010000 | 0100000 | |
sx
(a0^ b0) |
011001 | 1010101 | 1000101 | 1100101 | = 101 (result) |
cx
(a0& b0) |
100110 | 001000 | 0010000 | 0000000 | = 0 (finished) |
cx<<1 |
1001100 | 0010000 | 0100000 | 0000000 |
a ≡(mod n) b ⇔ a - b = qn ⇔ a = q1n + r ∧ b = q2n + r ∧ 0 ≦ r < n
Reason: a ≡(mod n) a mod n, and so on
%
(C, Ruby and many other programming
languages)、mod (Mathematics)remainder for negative operands | |||||||
---|---|---|---|---|---|---|---|
operands | always non-negative | same sign as divisor | same sign as dividend | ||||
a (dividend) | n (divisor) | q (a/n) | r (a%n) | q (a/n) | r (a%n) | q (a/n) | r (a%n) |
11 | 7 | 1 | 4 | 1 | 4 | 1 | 4 |
-11 | 7 | -2 | 3 | -2 | 3 | -1 | -4 |
11 | -7 | -1 | 4 | -2 | -3 | -1 | 4 |
-11 | -7 | 2 | 3 | 1 | -4 | 1 | -4 |
Programming languages,... | Pascal, mathematics, this lecture | Ruby, Python, Perl, MS Excel | C (ISO 1999), Java, JavaScript, PHP |
See English Wikipedia article on Modulo Operation
Output some data, three items on a line.
A simple way:
int items = 0; for (i=0; i<length; i++) { /* print out data[i] */ items++; if (items==3) { printf("\n"); items = 0; } }
Using the modulo operation:
for (i=0; i<length; i++) { /* print out data[i] */ if (i%3 == 2) printf("\n"); }
* mod 5 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 1 | 2 | 3 | 4 |
2 | 2 | 4 | 1 | 3 |
3 | 3 | 1 | 4 | 2 |
4 | 4 | 3 | 2 | 1 |
Division for rationals: a/b = c ⇔a b-1 = c; b b-1 = 1 (inverse)
Modular multiplicative inverse: bb-1 ≡ 1
n | b | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|---|
2 | - | 1 | |||||||
3 | - | 1 | 2 | ||||||
4 | - | 1 | - | 3 | |||||
5 | - | 1 | 3 | 2 | 4 | ||||
6 | - | 1 | - | - | - | 5 | |||
7 | - | 1 | 4 | 5 | 2 | 3 | 6 | ||
8 | - | 1 | - | 3 | - | 5 | - | 7 |
Only defined if n and b are coprime (i.e. GCD is 1)
Various methods to calculate
a/b (mod n) is defined as a b-1 (mod n)
Example:
3/4 (mod 7) = 3 · 4-1 (mod 7) = 3 · 2 (mod 7) = 6
(Check: 6 · 4 (mod 7) = 24 (mod 7) = 3)
Example: 216 mod 29 = ?
216 = 25 · 25 · 25 · 2
216 = 25 · 25 · 25 · 2 = 32 · 32 · 32 · 2 ≡(mod 29) 3 · 3 · 3 · 2 = 54 ≡(mod 29) 25
Prepare for final exam