Home English

Kuina-chan

くいなちゃんOct 17, 2017


プログラミング言語Kuin」の「mathライブラリ」についてです。

mathライブラリ

数学、科学、高度なアルゴリズムに関するライブラリ「math.kn」を解説します。
mathライブラリは、v.2017.10.17から追加されています。
mathライブラリに用意されているものはmathライブラリの通りです。
mathライブラリ
名前 説明
math@fact 階乗をfloatで求める関数
math@factInt 階乗をintで求める関数
math@gamma ガンマ関数
math@gcd 最大公約数を求める関数
math@lcm 最小公倍数を求める関数
math@modMul オーバーフローさせずに乗算の剰余を求める関数
math@modPow オーバーフローさせずに冪の剰余を求める関数
math@prime 素数かどうかを高速に判定する関数
math@primeFactors 素因数分解を高速に行う関数

math@fact

「math@fact」は階乗をfloatで求める関数です(math@fact関数の定義)。
math@fact関数の定義

 func fact(n: float): float

n 任意の値
戻り値 「n!」の値
この関数は、「n!=n×(n-1)!」が成り立つように階乗を実数に拡張しており、ガンマ関数を用いて「n!=Γ(n+1)」と定義されています。

math@factInt

「math@factInt」は階乗をintで求める関数です(math@factInt関数の定義)。
math@factInt関数の定義

 func factInt(n: int): int

n 任意の値
戻り値 「n!」の値
nが負の場合は未定義で、nが21以上になるとオーバーフローするため、nは0以上20以下の範囲で指定する必要があります。
「math@factInt」が生成する例外はmath@factInt関数の例外の通りです。
math@factInt関数の例外
発生条件 ビルド 例外コード
(16進数)
nが0未満 dbgのみ E9170006
nが21以上 dbgのみ E9170003
math@factInt関数の仕様はmath@factInt関数の仕様の通りです。
  • すべてのnに対する結果を保持しているため、この関数は瞬時に値を返す。
math@factInt関数の仕様

math@gamma

「math@gamma」はガンマ関数です(math@gamma関数の定義)。
math@gamma関数の定義

 func gamma(n: float): float

n 任意の値
戻り値 「Γ(n)」の値

math@gcd

「math@gcd」は最大公約数を求める関数です(math@gcd関数の定義)。
math@gcd関数の定義

 func gcd(a: int, b: int): int

a 整数1
b 整数2
戻り値 aとbの最大公約数
aとbのどちらかは0以外でなければなりません。 aやbが負の場合は、絶対値の最大公約数に等しいです。 すなわち、tg,tc,td,pl,a,comma,b,pr,eq,tg,tc,td,pl,abs,a,abs,comma,abs,b,abs,pr
「math@gcd」が生成する例外はmath@gcd関数の例外の通りです。
math@gcd関数の例外
発生条件 ビルド 例外コード
(16進数)
aとbがともに0 dbgのみ E9170006

math@lcm

「math@lcm」は最小公倍数を求める関数です(math@lcm関数の定義)。
math@lcm関数の定義

 func lcm(a: int, b: int): int

a 整数1
b 整数2
戻り値 aとbの最小公倍数
aとbのどちらかは0以外でなければなりません。 aやbが負の場合は、絶対値の最小公倍数に等しいです。 すなわち、tl,tc,tm,pl,a,comma,b,pr,eq,tl,tc,tm,pl,abs,a,abs,comma,abs,b,abs,pr
「math@lcm」が生成する例外はmath@lcm関数の例外の通りです。
math@lcm関数の例外
発生条件 ビルド 例外コード
(16進数)
aとbがともに0 dbgのみ E9170006

math@modMul

「math@modMul」はオーバーフローさせずに乗算の剰余を求める関数です(math@modMul関数の定義)。
math@modMul関数の定義

 func modMul(a: int, b: int, modulus: int): int

a 整数1
b 整数2
modulus 除算する値
戻り値 「a*b%modulus」に相当する値
単に「a*b%modulus」を計算すると、大きな値のときにオーバーフローして正確な結果が求まりませんが、この関数はオーバーフローを回避して計算するため正確な値が求まります。

math@modPow

「math@modPow」はオーバーフローさせずに冪の剰余を求める関数です(math@modPow関数の定義)。
math@modPow関数の定義

 func modPow(value: int, exponent: int, modulus: int): int

value 整数1
exponent 整数2
modulus 除算する値
戻り値 「value^exponent%modulus」に相当する値
単に「value^exponent%modulus」を計算すると、大きな値のときにオーバーフローして正確な結果が求まりませんが、この関数はオーバーフローを回避して計算するため正確な値が求まります。

math@prime

「math@prime」は素数かどうかを高速に判定する関数です(math@prime関数の定義)。
math@prime関数の定義

 func prime(n: int): bool

n 整数
戻り値 nが素数ならtrue、素数でなければfalse
math@prime関数の仕様はmath@prime関数の仕様の通りです。
  • ミラー・ラビン素数判定法と素数バッファを併用し、誤りのない素数判定を高速に行う。
math@prime関数の仕様

math@primeFactors

「math@primeFactors」は素因数分解を高速に行う関数です(math@primeFactors関数の定義)。
math@primeFactors関数の定義

 func primeFactors(n: int): []int

n 整数
戻り値 nの素因数
戻り値の配列には、nの素因数が昇順に格納されます。 例えばnが18のとき、戻り値は「[2, 3, 3]」になります。
math@primeFactors関数の仕様はmath@primeFactors関数の仕様の通りです。
  • ポラード・ロー素因数分解法の改良版を繰り返し適用し、誤りのない素因数分解を高速に行う。
math@primeFactors関数の仕様
1508205841ja