PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのbcpowmod()関数の使い方を徹底解説!剰余付きべき乗計算の基本と実例

PHPのbcpowmod()関数は、任意精度の基数(base)を指定した指数(exponent)でべき乗し、さらに指定した法(modulus)で割った余りを求めるための関数です。この関数は、任意精度の数値を文字列として受け取り、指定された精度(スケール)に従って結果を整形した上で、「基数の指数乗を法で割った余り」を返します。

巨大な数値のべき乗剰余計算は、暗号処理などの分野で頻繁に利用されるため、bcpowmod()は非常に実用的な関数といえます。

構文

String bcpowmod($base, $exponent, $modulus, $scale)

パラメータ

bcpowmod()関数は、$base$exponent$modulus$scale の4つのパラメータを受け取ります。

  • $base: べき乗の対象となる左オペランド(基数)です。文字列型のパラメータです。

  • $exponent: 指数を表す右オペランドです。文字列型のパラメータです。

  • $modulus: 法(剰余を取るための値)を表すオペランドです。文字列型のパラメータです。

  • $scale: 結果の小数点以下の桁数を指定する整数型のパラメータです。つまり、「(baseexponent % mod)」の計算結果において、小数点以下を何桁表示するかを決めます。デフォルト値は0です。

戻り値

bcpowmod()関数は、計算結果を文字列として返します。ただし、法($modulus)が0の場合や、指数が負の値の場合はFalseを返します。

使用例1:scaleを指定しない場合

<?php
   // 任意精度の入力数値
   $base = "5";
   $exponent = "7";
   $mod = "7";

   // base^exponent % mod を計算
   $result = bcpowmod($base, $exponent, $mod);
   echo "scaleなしの出力: ", $result;
?>

出力

scaleなしの出力: 5

この例では、5の7乗(78,125)を7で割った余りである「5」が出力されます。

使用例2:scaleを指定した場合

<?php
   // 任意精度の入力数値
   $base = "5";
   $exponent = "7";
   $mod = "7";

   // scale値を4に設定
   $scale = 4;

   // base^exponent % mod を計算
   $result = bcpowmod($base, $exponent, $mod, $scale);
   echo "scaleありの出力: ", $result;
?>

出力

scaleありの出力: 5.0000

scaleに4を指定したことで、結果が小数点以下4桁で表示されています。このように$scaleパラメータを使えば、出力の精度を自由に制御できます。

まとめ

bcpowmod()関数を使うことで、PHPで任意精度のべき乗剰余計算を簡単かつ正確に行うことができます。大きな数値を扱う場合でも、文字列として数値を渡すことで精度の劣化を防げる点が大きなメリットです。暗号化処理や数値計算が必要な場面で、ぜひ活用してみてください。

  1. PHPのlcg_value()関数とは?乱数生成の基本と使い方を解説

    lcg_value()関数の定義と使い方lcg_value()関数は、0から1までの範囲でランダムな数値(浮動小数点数)を生成するPHP組み込み関数です。「LCG」とは「線形合同法(Linear Congruential Generator)」の略称です。この手法は、不連続な区分線形方程式を用いて擬似乱数列を計算するアルゴリズムで、擬似乱数生成アルゴリズムの中でも最も古くから知られているものの一つです。構文lcg_value ( void ) : floatパラメータこの関数は引数を受け取りません。戻り値lcg_value()関数は、0.0以上1.0以下の範囲にある擬似乱数のfloat値を返し

  2. PHPのintdiv()関数とは?整数商の求め方と使い方をサンプル付きで解説

    定義と使用方法 intdiv() 関数は、2つの整数パラメータを受け取り、その整数商(割り算の結果の整数部分)を返します。x ÷ y の計算結果が商 i、余り r となるとき、次の式が成り立ちます。 x = y × i + r このとき、intdiv(x, y) は i を返します。余りは切り捨てられ、商のみが得られる点に注意してください。 構文 intdiv ( int $x , int $y ) : int パラメータ 番号パラメータと説明 1x割り算の分子(被除数)にあたる値を指定します。 2y割り算の分母(除数)にあたる値を指定します。 戻り値 PHP の intdiv