[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1 数の演算


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.1 idiv, irem

idiv(i1,i2)

:: 整数除算による商.

irem(i1,i2)

:: 整数除算による剰余.

return

整数

i1 i2

整数

[0] idiv(100,7);
14
[0] idiv(-100,7);
-14
[1] irem(100,7);
2
[1] irem(-100,7);
-2
参照

sdiv, sdivm, srem, sremm, sqr, sqrm, %.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.2 fac

fac(i)

:: i の階乗.

return

整数

i

整数

[0] fac(50);
30414093201713378043612608166064768844377641568960512000000000000

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.3 igcd,igcdcntl

igcd(i1,i2)

:: 整数の GCD (最大公約数)

igcdcntl([i])

:: 整数 GCDのアルゴリズム選択

return

整数

i1 i2 i

整数

[0] A=lrandom(10^4)$
[1] B=lrandom(10^4)$
[2] C=lrandom(10^4)$
[3] D=A*C$
[4] E=A*B$
[5] cputime(1)$
[6] igcd(D,E)$
0.6sec + gc : 1.93sec(2.531sec)
[7] igcdcntl(1)$
[8] igcd(D,E)$  
0.27sec(0.2635sec)
[9] igcdcntl(2)$
[10] igcd(D,E)$  
0.19sec(0.1928sec)
[11] igcdcntl(3)$
[12] igcd(D,E)$  
0.08sec(0.08023sec)
参照

gcd, gcdz.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.4 ilcm

ilcm(i1,i2)

:: 最小公倍数を求める.

return

整数

i1 i2

整数

参照

igcd,igcdcntl, mt_save, mt_load.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.5 isqrt

isqrt(n)

:: 平方根を越えない最大の整数を求める.

return

非負整数

n

非負整数


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.6 inv

inv(i,m)

:: m を法とする i の逆数

return

整数

i m

整数

[71] igcd(1234,4321);  
1
[72] inv(1234,4321);
3239
[73] irem(3239*1234,4321);
1
参照

igcd,igcdcntl.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.7 prime, lprime

prime(index)
lprime(index)

:: 素数を返す

return

整数

index

整数

[95] prime(0);
2
[96] prime(1228);
9973
[97] lprime(0);
99999989
[98] lprime(999);
0
参照

pari.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.8 random

random([seed])

:: 乱数を生成する.

seed
return

自然数

参照

lrandom, mt_save, mt_load.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.9 lrandom

lrandom(bit)

:: 多倍長乱数を生成する.

bit
return

自然数

参照

random, mt_save, mt_load.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.10 mt_save, mt_load

mt_save(fname)

:: 乱数生成器の現在の状態をファイルにセーブする.

mt_load(fname)

:: ファイルにセーブされた乱数生成器の状態をロードする.

return

0 または 1

fname

文字列

[340] random();
3510405877
[341] mt_save("/tmp/mt_state");
1
[342] random();
4290933890
[343] quit;
% asir
This is Asir, Version 991108.
Copyright (C) FUJITSU LABORATORIES LIMITED.
3 March 1994. All rights reserved.
[340] mt_load("/tmp/mt_state");
1
[341] random();
4290933890
参照

random, lrandom.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.11 nm, dn

nm(rat)

:: rat の分子.

dn(rat)

:: rat の分母.

return

整数または多項式

rat

有理数または有理式

[2] [nm(-43/8),dn(-43/8)];
[-43,8]
[3] dn((x*z)/(x*y));
y*x
[3] dn(red((x*z)/(x*y)));
y
参照

red.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.12 conj, real, imag

real(comp)

:: comp の実数部分.

imag(comp)

:: comp の虚数部分.

conj(comp)

:: comp の共役複素数.

return comp

複素数

[111] A=(2+@i)^3; 
(2+11*@i)
[112] [real(A),imag(A),conj(A)];
[2,11,(2-11*@i)]

[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.13 eval, deval

eval(obj[,prec])
deval(obj)

:: obj の値の評価.

return

数あるいは式

obj

一般の式

prec

整数

[118] eval(exp(@pi*@i));   
-1.0000000000000000000000000000
[119] eval(2^(1/2));
1.414213562373095048763788073031
[120] eval(sin(@pi/3));
0.86602540378443864674620506632
[121] eval(sin(@pi/3)-3^(1/2)/2,50);
-2.78791084448179148471 E-58
[122] eval(1/2);
1/2
[123] deval(sin(1)^2+cos(1)^2);
1
参照

ctrl, setbprec, setprec.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.14 pari

pari(func,arg,prec)

:: PARI の函数 func を呼び出す.

return

func 毎に異なる.

func

PARI の函数名

arg

func の引数

prec

整数

/* 行列の固有ベクトルを求める. */
[0] pari(eigen,newmat(2,2,[[1,1],[1,2]]));
[ -1.61803398874989484819771921990 0.61803398874989484826 ]
[ 1 1 ]
/* 1 変数多項式の根を求める. */
[1] pari(roots,t^2-2);
[ -1.41421356237309504876 1.41421356237309504876 ]
参照

setbprec, setprec.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.15 setbprec, setprec

setbprec([n])
setprec([n])

:: setbprec, setprecbigfloat の精度をそれぞれ 2 進, 10進 n 桁に設定する.

return

整数

n

整数

[1] setprec();
15
[2] setprec(100);
15
[3] setprec(100);
99
[4] setbprec();
332
参照

ctrl, eval, deval.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.16 setround

setround([mode])

:: bigfloat の丸めモードを mode に設定する.

return

整数

mode

整数

[1] setprec();
15
[2] setprec(100);
15
[3] setprec(100);
99
[4] setbprec();
332
参照

ctrl, eval, deval.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.17 setmod

setmod([p])

:: 有限体を GF(p) に設定する.

return

整数

n

2^27 未満の素数

[0] A=dp_mod(dp_ptod(2*x,[x]),3,[]);
(2)*<<1>>
[1] A+A;
addmi : invalid modulus
return to toplevel
[1] setmod(3);
3
[2] A+A;
(1)*<<1>>
参照

dp_mod, dp_rat, 数の型.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.18 ntoint32, int32ton

ntoint32(n)
int32ton(int32)

:: 非負整数と符号なし 32bit 整数の間の型変換.

return

符号なし 32bit 整数または非負整数

n

2^32 未満の非負整数

int32

符号なし 32bit 整数

参照

分散計算, 数の型.


[ << ] [ < ] [] [ > ] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

6.1.19 inttorat

inttorat(a,m,b)

:: 整数-有理数変換を行う.

return

リストまたは 0

a
m
b

整数

[2121] M=lprime(0)*lprime(1);
9996359931312779
[2122] B=isqrt(floor(M/2));
70697807
[2123] A=234234829304;
234234829304
[2124] inttorat(A,M,B);
[-20335178,86975031]
参照

ceil, floor, rint, dceil, dfloor, drint, isqrt.


[ << ] [ < ] [] [ > ] [ >> ]

この文書は3月 29, 2024texi2html 5.0を用いて生成されました。