任意の 2 つの数値について、確認する最善の方法は、 かどうかを確認することa % b == 0
です。モジュラス演算子は、ハードウェアによってパフォーマンスが異なりますが、コンパイラの方がはるかに優れています。モジュラス演算子は普遍的であり、コンパイラは、実行しているハードウェアに関係なく、出力する命令の最適なシーケンスを見つけ出します。
数値の 1 つが定数の場合、ハードウェアの div/mod は加算や減算よりも遅いため、コンパイラはビット シフトと減算の組み合わせ (ほとんどは 2 の累乗) を実行して最適化する可能性がありますが、最新のプロセッサではレイテンシ (既にわずか数ナノ秒) は、他の多くのパフォーマンス トリックによって隠されているため、心配する必要はありません。除算を繰り返してモジュラスを計算するハードウェアはありません (一部の古いプロセッサは、ビット シフトと減算を繰り返して除算を行いましたが、それでも専用のハードウェアを使用していたため、ソフトウェアでエミュレートするよりもハードウェアで実行する方が高速です)。最近のほとんどの ISA は、実際には除算と剰余の両方を 1 つの命令で計算します。
有効な唯一の最適化は、除数が 2 のべき乗である場合です。次に&
、下位ビットを (除数 - 1 で) マスクし、結果をゼロに対してチェックするために使用できます。たとえば、がa
8 で割り切れるかどうかを確認することa & 7 == 0
は同等です。優れたコンパイラがこれを行うので、そのままにしておいてください%
。