POINT
x//y
はfloor(x/y)と思えばOK.x%y
はmod yで,yと同符号になる.
ドキュメント
6. 式 (expression) — Python 3.12.1 ドキュメント//
(切り捨て除算: floor division):floor関数と同じ.
- 整数の切り捨て除算結果は整数.
%
(剰余: modulo):第一引数を第二引数で除算したときの剰余.
- 剰余演算子は常に第二引数と同じ符号 (またはゼロ).
- 剰余演算の結果の絶対値は、常に第二引数の絶対値よりも小さい.
- 切り捨て除算演算と剰余演算は、恒等式:
x == (x//y)*y + (x%y)
の関係にある.
負の数に対する演算
切り捨て除算演算について,print(-5//2) # -3 print(5//(-2)) # -3
となる.これは
\begin{aligned}
\biggl\lfloor -\frac{5}{2} \biggr\rfloor
= -3
\end{aligned}
に対応している.\biggl\lfloor -\frac{5}{2} \biggr\rfloor
= -3
\end{aligned}
つぎに,剰余演算について
print(-5%2) # 1 print(5%(-2)) # -1
となる.これは
\begin{aligned}
& -5 \equiv 1 \pmod{2} \\
& -5 \equiv -1 \pmod{-2}
\end{aligned}
に対応していて,結果を第2引数の符号に合わせたものになっている.& -5 \equiv 1 \pmod{2} \\
& -5 \equiv -1 \pmod{-2}
\end{aligned}
また,
print(-5 == (-5//2)*2 + (-5%2)) # True print(5 == (5//(-2))*(-2) + (5%(-2))) # True
となる.
参考文献/記事
- 記事を書いたきっかけ:B - Christmas Trees.数直線上の原点を基準に距離$M$おきにクリスマスツリーが置かれるとき,座標$x$以下の地点にあるツリーの座標の最大値は$\lfloor x/M \rfloor$と表せる($x$の符号によらない).