PARI/GP 関数
PARI/GPの利用方法
GP の起動は,コマンド "gp" による.
起動すると,行頭に "gp >" と GP のプロンプトが表示される.
プロンプト "gp >" のあとに計算させたい数式や関数(引数つきのコマンド)を入力し,Enterキーを押すと,GP は "%(番号)=" の後に答を表示する.
GP の主な共通的なコマンドを示す.
- quit または \q : GP の終了
- ? : ヘルプ
- ?\ : キーボードショートカットの表示
- ? 関数名 : 関数のヘルプ:(例:? primes)
- \b : 最後の演算結果を書式化して表示
- \p 有効数字 : 有効数字の変更(\p 100 で有効数字を100 桁に設定,初期値は28 桁)
- \r ファイル名 : ファイルからのプログラムの読み込み
- \d : 現在のデフォルト値の表示
- # : タイマ表示の切り替え(初期値は非表示)
- ## : 最後の演算のタイマ表示
- 結果の非表示 : 式の後にセミコロン ";" を入れる.
- /*...*/: コメント (/* から */ をコメントとみなす)
- \\...: 一行コメント (行末までをコメントとみなす)
PARI/GPの関数
PARI/GP の関数群は,用途に応じて次のように分類されている.
- Standard monadic or dyadic OPERATORS (単項,2項演算子)
- CONVERSIONS and similar elementary functions (変換に関する関数)
- TRANSCENDENTAL functions(超越関数の数値的な計算)
- NUMBER THEORETICAL functions(数論に関する関数)
- Functions related to ELLIPTIC CURVES(楕円曲線に関する関数)
- Functions related to general NUMBER FIELDS(一般の代数体に関する関数)
- POLYNOMIALS and power series(多項式、巾級数に関する関数)
- Vectors, matrices, LINEAR ALGEBRA and sets(ベクトル、線形代数に関する関数)
- SUMS, products, integrals and similar functions(和、積、積分など)
- GRAPHIC functions(グラフィック・プロッティングに関する関数)
コマンド "? n" で,上記のの第 n (1~10) グループの関数一覧が表示される.
また,n = 0 とすると,ユーザの定義した関数が表示される.
PARI/GP の暗号関係の演算に利用できる関数(コマンド)群を示す.
- 基本演算/変換
- +,-,*,/,%, ^
加減乗除,剰余,べき乗
- <=,<,>,>=,==,!=
比較演算
- ||,&&,!
論理演算(OR, AND, NOT)
- x!,factorial(x)
x の階乗
- sign (x)
x の符号(負:-1,零:0,正:1)
- shift (x, n)
x を n ビット左シフト(n:正数),または右シフト(n:負数) する.
- max(x, y),min(x, y)
x, y の最大値,または最小値を返す.
- Mod (a, n)
有理整数環 Z の整数 n を法とした剰余環 Z/nZ の元を表す.通常の数値と同様に,加減乗除演算に利用できる.
gp > Mod(3,5) + Mod(4, 5)
%1 = Mod(2, 5)
- digits (x, {b=10})
数値 |x| の b 進数における各桁の値をベクトルで返す.
gp > digits(123456, 16)
%1 = [1, 14, 2, 4, 0]
- x + O(p^k)
x (10進数) を p 進数 k 桁の数として表す.
gp > 564 + O(16^3)
%1 = 4 + 3*16 + 2*16^2 + O(16^3)
564 (10進数) は,16進で 234 になる.
- ベクトルと行列
- ベクトル
- 行ベクトル: [1, 2, 3]
- 列ベクトル: [1, 2, 3]~
- 要素参照: vector[i] (i = 1, 2,・・・)
- 要素数:#vector
- ベクトル生成: vector (n)
n 要素のベクトルを生成する.
- 行列
- 行列:[a,b,c; d,e,f] :2行3列の行列
- 参照:matrix[i, j] (i, j = 1, 2,・・・)
- 行列生成: matrix (m, n)
m x n の行列を生成する.
- 数論関数
- gcd (a, b)
a と b の最大公約数を計算する.
- lcm (a, b)
a と b の最小公倍数を計算する.
- gcdext (x, y)
d = gcd(x, y) かつ u*x + v*y = d なるベクトル [u,
v, d] を返す (拡張ユークリッド互除法).
- isprime (n)
整数 n が素数か否かを判定する.素数の場合 1,素数でない場合 0 が返る.
- prime (n)
n 番目の素数を返す.
- primes (n)
始めの n 個の素数からなるベクトルを返す.
- nextprime (n)
n に等しいか大きい最小の素数を返す.
- chinese (Mod(a, m), Mod(b, n))
m, n が互いに素な時,x = a (mod m), x = b (mod n) なる
x を求める(中国人の剰余定理).
gp > chinese (Mod(3,3),Mod(4, 5))
%1 = Mod(9, 15)
- factor (n)
n を素因数分解する.
- znprimroot (q)
法 q に関する原始根を求める.
- znlog (x, g)
(Z/pZ)* における x の基底 g に対する離散対数を求める.
すなわち,x = gy mod p なる y を求める.
- eulerphi (n)
オイラー関数 φ(n) を計算する.
- kronecker(x, y)
Kronecker-Legendre 記号 (x / y) を計算する.
- 乱数
- random (n)
0 ~ n - 1 の擬似乱数を返す(nが整数型の場合).n の型により戻り値の型も異なる.
- getrand ()
乱数種を返す.
- setrand (s)
乱数種として s を設定する.
- 多項式
- Pol (v)
ベクトル v の要素を次数が高い順に係数に持つ多項式を返す.
- Polrev (v)
ベクトル v の要素を次数が低い順に係数に持つ多項式を返す.
- subst (x, y, z)
多項式 x の変数 y を z に置き換える.
- 体の生成
- ffgen (q, {v})
q 個の要素を持つ有限体を返す.ここで,q = pm は素数のべきである.
この関数は,次数 m の Fp[X] に属する規約多項式 P を生成し,g =X (mod P(X)) を返す.v
が指定された場合,多項式の変数名として用いられる(省略時は x).
素数のべき q を指定する代りに直接規約多項式を指定することもできる.
- ffinit (p, n,{v='x})
Fp 上の次数 n の既約多項式を生成する(p は素数).
この関数は,ffgen と共に用いると便利である.例えば,g = ffgen(ffinit(3,2), 't) であるが,これは g = ffgen(3^2, 't) と等価である.規約多項式は,g.mod
で得られる.
- 楕円曲線関数
楕円曲線上の点 (x, y) は,長さ 2 のベクトル [x, y] で表し,無限遠点は長さ 1 のベクトル [0] で表す.
楕円曲線 E に関して,以下の定数が定義される.
- E = ellinit ([a1, a2, a3, a4, a6], {D=1})
Weierstrass 方程式 y2 + a1xy + a3y =
x3 + a2x2 + a4x +
a6 で与えられる楕円曲線 E を生成する.
D は曲線が定義される体を表す.素体 Fp の場合,p を指定する.
一般の有限体の場合は,体生成関数 ffgen の戻り値を指定する.
- ellap (E, {p})
楕円曲線 E に対する Frobenius のトレース t を計算する.
ここで, #E(Fq) = q + 1 - t の関係がある.
- ellcard (E, {p})
楕円曲線 E の群 E(Fq) の位数を計算する.
- ellorder (E, z)
楕円曲線 E 上の点 z の位数を計算する.
- elloncurve (E, P)
楕円曲線 E,点 P に対して, P ∈ E か否かを判定する.
- elladd (E, P1, P2)
楕円曲線 E,点 P1,P2 ∈ E に対して, P1 +
P2 の点を求める.
- ellsub (E, P1, P2)
楕円曲線 E,点 P1,P2 ∈ E に対して, P1 -
P2 の点を求める.
- ellmul (E, P, n) / ellpow (E, P, n)
楕円曲線 E,点 P ∈ E,n ∈ Z に対して,スカラー倍 nP の点を求める.
- ellordinate (E, a)
楕円曲線 E,スカラー値 a に対して, P ∈ E の x 座標が a となる点 P の y
座標を求める.
- elllog (E, P, G)
与えられた楕円曲線 E 上の点 P,G に対して,基数 G に対する P の離散対数を計算する.すなわち,P =
[n]G なる最も小さい正整数 n を計算する.
- random (E)
楕円曲線 E 上の点をランダムに生成する.