pari

pariの使い方すぐに忘れるのでメモ

/*
 コメント
*/
\\ コメント
\\ 特に指定しない場合は変数は全てグローバル扱いになる。
\\ 関数定義内で局所変数を使う場合は localまたはmyを使う。
\\ 初期化されていない変数は、自動的に自由変数扱いになる。
\\ 自由変数を明示的に使う場合は 'x などとする。
\\ 例:
f(a)={
	local(x='x);
	print(x^2+x+a);
};
x=3;
f(5); \\ x^2+x+5と表示される。

\\ for文等で複数行に渡る文を書く場合には{}で囲む
{for(i1=0, 3,
	for(i2=0, 3, 
		print(i1, " ", i2, " ", i1*i2);
	);
);}

if(x==0, error("abc")); \\エラーを投げる

\\ モジュラー演算
lift(Mod(1/7,100)) = 43

\\ 有限体
T = ffinit(2,8);
y = ffgen(T, 'y);
h = y.pol; \\ hはyの持ち上げになる。h=lift(y)とかでは持ちあげられない。

\\ p進数
log(1+3+O(3^4))

\\ 多項式
Polrev([1,2,3]) => 1+2*x+3*x^2
Pol([1,2,3]) => x^2+2*x+3

\\ 二次体
w = quadgen(5);
w^10 => 34 + 55*w

\\ ベクトル
[1,2]*[3,4]~ => 11
[1,2]~*[3,4] => [3, 4] [6,8] 
v = [3,1,4,1,5,9,2,6,5]
v[1] => 1
v[3..5] => [4,1,5]
vector(5, i, 2^i) => [2,4,8,16,32]
Vecrev([(1+x+x^3)]) => [1,1,0,1]
primes(5) => [2, 3, 5, 7, 11]
[x+2 | x<-primes(x), x>2] => [5,7,9,13]

\\行列
Mat(2, 2, i, j, 2*i+j);
[3, 4; 5, 6]

\\1の冪根
sqrtn(Mod(1,13),4, &z) => Mod(1,13) \\ z=Mod(5,13)となる。