練習問題 3.6.2
p = (m+n) `div` 2
として,
m + 1 < n
であれば
m < p < n
であることを示せ.
m + 1 = n
の場合はどうなるか.
div
の仕様により,
p = floor((m+n)/2)
.
foor
の仕様により
(m+n)/2 - 1 < p ≦ (m+n)/2
(m+n)/2 - 1 < p ≦ (m+n)/2
≡ { 全体に2をかける }
m + n - 2 < 2p ≦ m + n
≡ { m+1 < n }
2m - 1 < m + n - 2 < 2p ≦ m + n < 2n - 1
≡ { 全体を2で割って }
m - 1/2 < p < n - 1/2
≡ { 全体に 1/2 を加えて }
m < p + 1/2 < n
≡ { m,n,pともに整数だから }
m < p < n
m + 1 = n
であれば,
(m+n)/2 - 1 < p ≦ (m+n)/2
≡ { 全体に2をかける }
m + n - 2 < 2p ≦ m + n
≡ { m+1 = n }
2m - 1 < 2p ≦ 2m + 1
≡ { 全体を2で割って }
m - 1/2 < p ≦ m + 1/2
≡ { 全体に 1/2 を加えて }
m < p + 1/2 ≦ m + 1
≡ { m,n,pともに整数だから }
m = p < n