algo — C++23 日本語リファレンス GitHub

StirlingSmallPLargeN

クラス · 第1種・第2種スターリング数 mod 小さい素数 p を、n, k が巨大(~1e18)でも求める

struct StirlingSmallPLargeN;

概要

第1種・第2種スターリング数 mod 小さい素数 p を、n, k が巨大(~1e18)でも求める

$(x)_n\equiv(x^p-x)^q(x)_r\pmod p$ と、 その双対にあたる基底展開の周期性を利用する。

構築・破棄

名前 説明 計算量
(constructor) 法pに対する計算テーブルを構築する 時間・空間ともに $O(p^2)$

メンバ関数

名前 説明 計算量
stirling1 符号付き第1種スターリング数 $s(n,k)\bmod p$ を返す $O(\log_p n)$
stirling2 第2種スターリング数 $S(n,k)\bmod p$ を返す $O(\log_p n)$

メンバの詳細

(constructor)

explicit StirlingSmallPLargeN(unsigned p);

法pに対する計算テーブルを構築する

stirling1

unsigned stirling1(std::int64_t n, std::int64_t k) const;

符号付き第1種スターリング数 $s(n,k)\bmod p$ を返す

stirling2

unsigned stirling2(std::int64_t n, std::int64_t k) const;

第2種スターリング数 $S(n,k)\bmod p$ を返す