/*--------------------------------------------------------- LIST of GBnums constants, functions and commands .who : to get the latest release -----------------------------------------------------------*/ GBnums 4.2 // // list format : package function_name argnums(minimal) function_type // function_type is : _... // eg: f_zz : takes to mpz arguments and returns mpf // types : // z = mpz (large integer) // f = mpf (large float) // q = mpq (rational) // s = string // e = symbolic expression : math expression : x**2 +b*x + c,sin(x),...,a+E,... // x = symbolic name // i = small integer (uint 32) // v = vector // _ = any // F = mpf function : mpf fun (mpf x) {....} // S = sequence : mpf seq (mpz n) { ....} // I = integer sequence : mpz iseq (mpz n) {.....} // M = matrix (n * m) // * = any type , any number (eg: print()) // reg_exp : regular expression - eg : *fact* A math expression may be used where a function name is needed. Eg : mpf foo(mpf x) {return sin(x)-cos(x);} Find zeroes of foo : x0 = fzero(foo,-PI,PI) OR xo = fzero(sin(u)-cos(u),-PI,PI) // 'u' is a free variable --------------------------------------------------------------------- -> .who sys VERBOSE 1 0=none 1=medium 2=all sys SYMBOLIC 0 constant UNDEF -1 constant NULL {null} constant null {null} constant HALF_ONE 0.5 constant PI 3.141592654 3.1415926535... constant TWOPI 6.283185307 constant HALFPI 1.570796327 constant QUADPI 0.7853981634 constant SQRT_2 1.414213562 constant SQRT_3 1.732050808 constant E 2.718281828 log(E) -> 1. constant GAMMA 0.5772156649 Euler-Mascheroni constant constant GAMMA_1_4 3.625609908 constant GAUSS 0.8346268417 1 / agm (1,SQRT_2) constant EPSILON 1.0e-10 constant INFINITY 1213465420566824229549638147858893172309.. (10**1082) constant LOW_PRECISION 1.0e-20 constant EPSILON_Q 1/10000000000 constant EPSILON_Z 10000000000 constant LOG_2 0.6931471806 constant LOG_10 2.302585093 constant CHAMP 0.1234567891 Champernowne's number constant INV_LOG_10 0.4342944819 constant DBL_MAX 1.000000000e+300 constant DBL_MIN 1.0e-300 constant I2 -1 sys ERROR 0 see system.h. -1 = I/O error sys TRACE 0 0=none 1=run 2=step/step sys DEBUG 7 see system.h sys BREAK argc=0 z BREAK(); -> enter inspector loop iff DEBUG & DBG_BREAK sys STEP argc=1 z_* STEP(var1,var2,..); iff DEBUG & DBG_BREAK io EDITOR "c:\Program Files\Textpad 4\textpad.exe" preferred editor path io PATH c:\gbnums io TAB \t print separator : usage : TAB = ';' TAB ='\t' ... io PROMPT -> io DEFAULT_COLOR 14 io TEXT_COLOR 10 io TEXT_HILITE 10 io WANTS_COLOR 1 io VFORMAT 0 vector output format : see system.h io crc argc=1 z_z crc32 = crc(n) io fopen argc=1 z_ss fp = fopen('file' [,'mode']) io fclose argc=1 z_z fclose(fp) io fget argc=1 z_z n = fget(fp) - reads next 1-line number or expression io fprint argc=2 z_z* fprint(fp,n,m,vector,'foo',...) - using TAB separator io fprintln argc=2 z_z* io fprintf argc=2 z_zs* fprintf(fp,format,'foo',z,...) io logfile argc=0 s_s logfile('fname'|''); print,println & printf >> logfile io read argc=1 z_si z = read('file' [,echo]) io input argc=0 z z =input() - from stdin io strinput argc=0 s string = strinput() - from stdin io output argc=1 z__i output(anything[,base]) >> stdout io print argc=1 z_* print(n,x,vector,'foo',...) - using TAB io println argc=1 z_* io printf argc=1 z_s* printf(format,'foo',...) io pprint argc=1 z_* pprint(n,m,vector,'foo',...) - pretty print io pprintln argc=1 z_* pretty print io save argc=1 z_ss rc = save('file' [,'package'|'.usr']) - save package vars io savevar argc=2 z_sss rc = savevar('file' ,'var_name'[,'w'|'a']) io write argc=2 z_s_s rc = write('file',item [,header]); sys bench argc=3 z_Fzzi seconds = bench(fun,nfrom,nto[,ntimes|1]); sys cmd argc=1 z_s cmd('top_level_command') - eg cmd('zdigits 42'); sys color argc=1 z_i color([1..15]) ; 0=default sys date argc=0 s_s date(['format']) sys error argc=1 z_s error('msg') --> top level sys exit argc=1 z_i exit(code) sys hilite argc=1 z_i hilite(acolor) < 255 sys tips argc=1 z_i tips(0|1) -- hide/show start-up tip sys kill argc=1 z_s kill('symbol') - kill('mymatrix') sys killusr argc=0 z_ nbkilled = killusr(); /* package usr */ sys info argc=1 s_ss info('symbol'[,'string']) sys mtime argc=0 z_i millisec - t = mtime(); mtime(0): init sys raise argc=1 z_i raise(SIGINT|SIGBREAK); sys sleep argc=1 z_i sleep(n millisec); sys throw argc=1 z_i throw(errnum|0) sys time argc=0 z_i sec - t = time(); time(0) : init sys timer_set argc=2 z_Fi rc = timer_set(function, milli-seconds) sys timer_kill argc=0 z_ rc(0|1) = timer_kill() sys timer_start argc=0 z_ rc(0|1) = timer_start(); sys timer_stop argc=0 z_ rc(0|1) = timer_stop(); sys trace argc=0 z_i trace([0:none|1:nostep|2:step); sys url argc=1 s_ss url('known symbol'[,'http://....']) sys waitkey argc=1 z_s ascii_char = waitkey('message'); sys winexec argc=1 z_s return_code = winexec('winstuff.exe'); sys www argc=1 z_s www('url'),www('explorer'),www('file') str ascii argc=1 z_s a= ascii('+') str printh argc=2 z_si printh(str,color) - hilites '...' str strcat argc=2 s_s... strcat(/*into*/s1,s2,...) str strcatn argc=2 s_sz strcatn(/*into*/s1,n) str strcmp argc=2 z_ss strcmp(s1,s2) -> <0|0|>0 str strcpy argc=2 s_ss strcpy(/*into*/s1,s2) str strlen argc=1 z_s l = strlen(s1) str strmatch argc=2 z_ss strmatch('ab1cde','?b[123]*e') -> 1 str snull argc=1 z_s snull('') -> 1 str fgetname argc=1 s_fi name = fgetname(fval [,ext= 0|1|2=all]); -- fgetname(zeta(2)) -> P I**2 / 6 str fsetname argc=2 s_sf fsetname('alpha',E**0.23); zmath EXACT 0 zmath P 0 global for zmath functions zmath Q 0 global for zmath functions zmath R 0 global for zmath functions zmath REPS 5 default # of tries for Miller-Rabin tests zmath MOD 0 toplevel results modulo(MOD) zmath PRIME { 0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...} table of primes[1..100000] zmath abs argc=1 z_z zmath add argc=2 z_z.. s=add(n1,n2,....) zmath cache argc=2 z_Fi cache(fun,dim) zmath getcache argc=1 v_F getcache(fun) --> vector zmath setcache argc=2 v_Fv setcache(fun, vector) zmath cmpabs argc=2 z_zz cmpabs(a,b) --> |a|>|b|? --> <0|0|>0 zmath divqr argc=2 z_zz q = divqr(n,d) : sets R = n - q*d zmath divexact argc=2 z_zz divexact(a,b) = a @ b zmath fact argc=1 z_i n! zmath factmod argc=2 z_iz a=fatcmod(b,m): a = b! mod(m) zmath funpow argc=3 *_F*i funpow(fun,x0,ntimes) := fun(fun(fun..(fun x0))) zmath gcd argc=2 z_zz gcd(33,666) --> 3 zmath gcdext argc=2 z_zz g = gcdext(n,m). sets P & Q: n*P + m*Q = g zmath fget2exp argc=1 f_z a = fget2exp(n) --> n = a * 2**P (0.5<=a<1) zmath id argc=1 z_z id(n)->n zmath invmod argc=2 z_zz a = invmod(n,m) : a * n = 1 (mod m) - may set ERROR zmath iscongr argc=3 z_zzz ? a == b (mod c) zmath iscongr_2e argc=3 z_zzi ? a == b mod(2**c) zmath isdiv argc=2 z_zz ? a divisible by b - same as a %% b zmath isdiv_2e argc=2 z_zi ? a divisible by 2**b zmath iseven argc=1 z_z ? not (a & 1) zmath isodd argc=1 z_z ? a & 1 zmath ispower argc=1 z_z ? a == r**k zmath ispower2 argc=1 z_z ispower2(n) --> set P iff n == 2**P zmath issquare argc=1 z_z ? a == r**2 zmath issquarefree argc=1 z_z isquarefree(3*5*17) -> 1 - isquarefree(3*5*5) -> 0 zmath lcm argc=2 z_zz lcm(3,11) --> 33 zmath max argc=2 z_z.. m= max(a1,a2,a3,...) zmath maxabs argc=2 z_zz x = maxabs(a,b) -- x >= |a] & x >=|b| zmath min argc=2 z_z.. m= min(a1,a2,a3,...) zmath mul argc=2 z_z.. p= mul(a1,a2,a3,...) zmath mulmod argc=3 z_zzz a=mulmod(b,c,m); a = b*c mod(m) zmath pow argc=2 z_zi a = pow(n,42); -- a = n**42 zmath powmod argc=3 z_zzz a=powmod(b,c,m); a = b**c mod(m) zmath product argc=3 z_Iiii p= product(I(n),from,to[,step]) zmath randp argc=1 z_z random prime in [2..n-1] zmath remove argc=2 z_zz a= remove(n,f) : remove factor f - P := # factors zmath rand argc=1 z_z rand(n) in [0..n-1], in[n..-n[ if n<0 zmath randseed argc=1 z_z randseed(n) ; n = 0 --> default zmath root argc=2 z_zi a = root(n,r) : a**r = n - set EXACT zmath sigma argc=3 z_Iiii s= sigma(I,nfrom,nto[,step]) zmath size argc=1 z_zi size(n[,base]) zmath sgn argc=1 z_* sgn(x) --> -1|0|+1 zmath sqrt argc=1 z_z sqrt(10) -> 3 zmath sqrtrem argc=1 z_z s = sqrtrem(a): a = s*s + R zmath swap argc=2 z_** swap(var1,var2) zmath z1 argc=1 z_z z1(n) -> 1 bit clrbit argc=2 z_zi n0 = clrbit(n,pos) bit hamdist argc=2 z_zz d = hamdist(a,b); -- hamming distance bit popcount argc=1 z_z numbits = popcount(n) bit scan0 argc=2 z_zi pos0 = scan0(n,starter bit) bit scan1 argc=2 z_zi pos1 = scan1(n,starter bit) bit setbit argc=2 z_zi n1 = setbit(n,pos) bit tstbit argc=2 z_zi tstbit(n,pos) --> 0|1 bit bitexplode argc=2 v_vz bitexplode(/*into*/v,n) nt crt argc=3 z_vvi chinese remainder theorem. see crt.n nt decomp argc=2 v_vzii decomp(/*into*/ M[][2],n[,verbose=0|1|2]) nt divisors argc=2 v_vzii divisors(/*into*/L[],n[,proper|0[,verbose=0|1|2]]) nt e_phi argc=1 z_z Euler phi : # of coprimes(n) <= n nt e_sigma argc=1 z_z Euler sigma : sum of divisors(n) nt factor argc=1 z_zi f=factor(n[,verbose=0|1|2]) -- set P := n/f nt factorp argc=1 z_ziii f=factorp(n[,0|1|2]) (pollard-rho) - set P := n/f nt factorq argc=1 z_zi f=factorq(n[,0|1|2]) (quad. sieve) - set P := n/f nt factorsmall argc=1 z_zi f=factorsmall(n[,numprimes]) (trial div) - set P := n/f nt factors argc=2 v_vzi factors(/*into*/ V,n [verbose=0|1|2]) -see also decomp nt factornum argc=1 z_zi num_prime_factors_with_repeat = factornum(n [,cut]) nt radical argc=1 z_zi product_of_primes_dividing_n = radical(n) nt factorsum argc=1 z_zi sum_of_prime_factors_with_repeat = factorsum(n) nt fib argc=1 z_i fib(n+1)==fib(n)+fib(n-1) nt fib2 argc=1 z_i f= fib2(n); -- set P=fib(n), Q=fib(n-1) nt issemip argc=1 z_zi issemip(n,[verbose=0|1|2]) nt isprime argc=1 z_zi isprime(n,[reps]) -- reps = # Miller-Rabin tests nt isprime_b argc=1 z_zi isprime_b(p[,verbose=0|1]) Baillie-PSW test nt insieve argc=1 z_zi insieve(n [,sieve_level|1]) -> see system.h nt ispowerp argc=1 z_zi k = ispowerp(n[,verbose=0|1|2]) - set P if n= prime**k nt jacobi argc=2 z_zz j = jacobi(n,m) nt kronecker argc=2 z_zz k = kronecker(n,m) nt legendre argc=2 z_zz l= legendre(a,p) nt lfactors argc=2 v_vzi lfactors(/*into*/ V,n [verbose=0|1|2]) -- with repeat nt lucnum argc=1 z_i lucas number nt moebius argc=1 z_z mu = moebius(n) nt moreprimes argc=1 z_i p = moreprimes(n) - 10**5 < n <10**7 - fills PRIME[] nt nextprime argc=1 z_z pnext = nextprime(p); nt nextsquare argc=1 z_z n = nextsquare(m); nt numdiv argc=1 z_z numdiv(n[,verbose=0|1|2]) -> # of divisors nt nthprime argc=1 z_z p = nthprime(n); n <= 10**12 nt order argc=2 z_zz k=order(a,p); min (k) : a**k==1 (mod p) nt phi_n argc=2 z_iz a = phi_n(n,x); cyclotomic polynom. (n) value at x nt pi argc=1 z_z pi(n) = # primes <= n ; n <= 10**13 nt prevprime argc=1 z_z p = prevprime(p); -- previous prime nt primroot argc=2 z_zi g=primroot(p,1=least|0=any); - g**(p-1) == 1 (mod p) nt primorial argc=1 z_i primorial(n) = p(1)*p(2)*....*p(n) nt qsieve argc=3 z_Izz qsieve(sieve_function,from,to) -- to <= 10**18 nt sieve argc=3 z_Izzi sieve(sieve_function,from,to [,level]) nt sqrtmod argc=2 z_zz x=sqrtmod(a,p) : x**2 == a (mod p) nt wheel argc=3 z_Fzzi wheel(wheel_function,from,to[,# of primes[2..8]]) qmath q1 argc=1 q_z q1(n) -> 1/1 qmath qabs argc=1 q_q qabs(-1/666) -> 1/666 qmath qden argc=1 z_q qden(-1/666) -> 666 qmath qdiv2exp argc=2 q_qi q=div2exp(r,a) -> q:= r / 2**a qmath qinv argc=1 q_q qinv(3/4) -> 4/3 qmath qisint argc=1 z_q qisint(3/4) -> 0 qmath qmul2exp argc=2 q_qi q=qmul2exp(r,a) -> q:= r * 2**a qmath qnew argc=2 q_zz qnew(a,b) -> a/b qmath qnum argc=1 z_q qnum(-7/666) -> -7 qmath qproduct argc=3 q_Qiii qp=qproduct(Q,nfrom,nto[,step]) qmath qrand argc=1 q_z qrand(n) qmath qsigma argc=3 q_Qii qs=qsigma(Q,nfrom,nto) series bell argc=3 f_Sfzi bell(S,x,p[,nto] = sigma[0...] S(p**n) * x**n series fsum argc=2 f_Sii fs=fsum(S,nfrom[,nto|INFINITY]) series lserie argc=2 f_Sf lserie(S,s) = sigma[1...] S(n)/n**s series sum argc=3 z_Siii s = sum(S,nfrom,nto[,step]) series qsum argc=3 q_Qiii qs=qsum(Q,nfrom,nto[,step]) series gserie argc=2 f_Sfi gserie(S,x[,nto]) = sigma[0...] S(n)* x**n series eserie argc=2 f_Sfi eserie(S,x[,nto]) = sigma[0...] S(n)* x**n / n! series iserie argc=2 f_Sfi iserie(S,x[,nto]) = sigma[0...] S(n)/ x**n series lambert argc=2 f_Sfi lambert(S,x[,nto]) = sigma[1...] S(n)* x**n / (1.-x**n) comb cbin argc=2 z_zi binomial coefficient C(n,k) comb cbinmod argc=3 z_zzi cbinmod(n,k,p) -> C(n,k) % p comb comb_init argc=3 v_vii combinations : comb_init(V2,n,k) comb comb_next argc=2 z_vv while(comb_next(/*into*/V1,V2)) println(V1); comb part argc=1 z_i # of partitions : n = m1+m2+..mk (k<=n) comb bestmod argc=3 z_vvi mod = bestmod(/*into*/Vrems, V, maxmod) comb perm_apply argc=2 v_vv perm_apply(/*into*/V1,Vperm) comb perm_rand argc=1 v_v perm_rand(/*into*/Vperm) comb perm_init argc=1 v_vi permutations of V2: perm_init(V2[,n]) comb perm_next argc=2 z_vv while(perm_next(/*into*/V1,V2)) println(V1); comb lperm argc=3 v_vFi lperm(/*into*/v, fun, n); -- lexicographic - see perm.n bag bag_dim argc=1 z_i nb_items = bag_dim(hB); bag bag_kill argc=1 z_i bag_kill(hB); bag bag_new argc=0 z hB = bag_new(); -- new bag = set of {key.value} bag bag_get argc=2 z_ii item = bag_get(hB,key); - returns UNDEF if not found bag bag_put argc=3 z_iiz bag_put(hB,key,value); key in [1..2**32-1] bag bag_tomx argc=2 v_Mi convert bag to matrix : bag_tomx(/*into*/M,hB); bag mx_tobag argc=2 z_iM convert matrix[n][2] to bag : mx_tobag(/*into*/hB,M); hash h_enum argc=0 z_i h_enum([entry_num|0]); -- starts enumeration hash h_new argc=1 z_i size = h_new(num_entries); hash h_get argc=1 z_z value = h_get(key); -- UNDEF if none hash h_kill argc=0 z_ h_kill(); : clear hash table hash h_getk argc=0 z_ key = h_getk(); -- UNDEF if no more hash h_getv argc=0 z_ value = h_getv(); -- UNDEF if no more hash h_next argc=0 z_ h_enum(); while(h_next()) {key= h_getk();..} hash h_put argc=2 z_zz rc = h_put(key,value); hash h_stats argc=0 z_ h_stats(); hash h_tomx argc=1 v_M convert hash table to matrix : h_tomx(/*into*/M); map map_base argc=0 z_z base=map_base([newbase]) map map_crc argc=0 z_ crc = map_crc() map map_count argc=1 z_i map_count(0|1) : count_ones= map_count(1) map map_fermat argc=2 z_ii map_fermat(a,0|1|2=all) : map[n] := isfermat(n,a) map map_fun argc=2 z_Fi map_fun(fun,0|1|2=all) : map[n]:=fun(n) map map_get argc=1 z_i bit = map_get(disp) map map_init argc=3 z_zii bytes = map_init(base,size,0|1) map map_next0 argc=1 z_z next0 = map_next0(n); -1 = none map map_next1 argc=1 z_z next1 = map_next1(n); -1 = none map map_comp argc=0 z_ map_comp(); -> map[n] ^= 1 map map_mod argc=3 z_iii map_mod(a,mod,0|1) : (re)set all n == a (mod) map map_prime argc=1 z_i map_prime(0|1|2=all) : map[n] := isprime(n) map map_print argc=2 z_ii map_print(0|1, maxnb|0=all) map map_quad argc=4 z_zzzi map_quad(a,b,c,0|1) : map[a*n**2 + b*n + c] := 0|1 map map_realloc argc=2 z_ii bytes = map_realloc(new_size,0|1) map map_read argc=1 z_s map_read('filename'); map map_sieve argc=2 z_ii map_sieve(maxp,0|1) : map[prime*k] := 0|1, prime<=maxp map map_show argc=0 z_ map_show() map map_write argc=2 z_ss map_write('filename','comment'); map map_scan0 argc=0 z_ next0 = map_scan0(); -1 = no more map map_scan1 argc=0 z_ next1 = map_scan1(); -1 = no more map map_set argc=2 z_ii map_set(disp,0|1) map map_start_scan argc=1 z_i map_start_scan(0|1); vect isnull argc=1 z_v isnull(v) -> 0|1 vect vadd argc=3 v_vvv vadd(v,v1,v2) : v[i]= v1[i] +v2[i] vect vappend argc=3 v_vvv vappend(/*into*/v,v1,v2) vect vapply argc=2 z_vI vapply(v,foo) -- call foo(v[i]) ,i=[0..dim-1]) vect vbump argc=2 v_vi vbump(v,n) -- add n items vect vcast argc=2 v_vi vcast(v,UINT_TYP|MPZ_TYP|MPF_TYP); vect vclean argc=2 v_vf vclean(v,eps) : |v[i]| <= eps ==> v[i] := 0 vect vconcat argc=2 v_vv vconcat(/*into*/v1,v2) -- v1 := v1 || v2 vect vcdr argc=2 v_vv vcdr(/*into*/v,v1) -- v:= {v1[1],v1[2],..v1[dim-1]} vect vdelete argc=2 v_vi vdelete(v,idx) vect vdiff argc=3 v_vvv vdiff(/*into*/v,v1,v2) -- set substraction vect vdim argc=1 z_vi dim = vdim(v[,new dim|0]) -- change dimension vect vdiv argc=2 v_v_ vdiv(v,x) -- v[i] /= x vect vdot argc=2 *_vv p = vdot(v1,v2) -- p = sigma(v1[i]*v2[i]) vect vequal argc=2 z_vvi vcomp(v1,v2[,dim]) -> 1|0 vect vfilter argc=2 v_vF vfilter(v,foo) -- delete v[i] iff foo(v[i])==0 vect vgcd argc=1 z_v g = vgcd(v); -- g = gcd(v[0],...,v[i],..) vect vgcdiv argc=1 z_v g = vgcdiv(v); -- g = gcd(v[0],...,v[i],..) -- v[i] /= g vect vinit argc=2 v_v__ vinit(v,start [,step|0]) -- v[i] :=start +i*step vect vinsert argc=3 v_vi_ vinsert(/* into */v,idx,x) -- idx in[0..dim-1] vect vinter argc=3 v_vvv vinter(/* into */v,v1,v2) -- set intersection vect vitems argc=1 z_v num_items_not_zero = vitems(v), vect vnodup argc=1 v_v vnodup(v) -> suppress duplicates vect vmap argc=2 v_vS vmap(v,foo) -- v[i] := foo(v[i]),i=[0..dim-1]) vect vmapx argc=2 v_vS vmapx(v,gee) -- v[i] := gee(i),i=[0..dim-1] vect table argc=2 v_vSiii table(v,fun[,nfrom[,nto[,step|1]]]) -- v[i] := fun(nfrom+step*i) vect vmatch argc=3 z_vvi idx = vmatch(v,v1,lg) : is v1[0..lg-1] inside v ? -1=no vect vmax argc=1 z_v idx = vmax(v) -- returns index vect vmin argc=1 z_v idx = vmin(v) -- returns index vect vmul argc=2 v_v_z vmul(v,x [,modulo]) -- v[i] *= x vect vmod argc=2 v_vz vmod(v,m) -- v[i] := v[i] mod(m) vect vname argc=1 s_v vname(v) --> vector name vect vneg argc=1 v_v vneg(v) -- v[i] := -v[i] vect vnext argc=2 z_*v while(vnext(/*into*/a,v)) {...} vect vnorm argc=1 f_v |V| = sqrt(sigma(v[i]*v[i])) vect vpop argc=1 *_v item = vpop(v) vect vprime argc=2 v_vzi vprime(v,pstart[,dim]) : v[0] = pstart, v[i] = nextprime(v[i-1]) vect vpush argc=2 z_v* idx = vpush(v,item) vect vrand argc=2 v_vzi vrand(v,range[,dim]) v[i] := rand(range) vect vrandp argc=2 v_vzi vrandp(v,range[,dim]) v[i] := randp(range) vect vread argc=2 v_vsi dim = vread( /*into*/ v,filename) vect vreverse argc=1 v_v vreverse(v) vect vsearch argc=2 z_v*i idx = vsearch(v,x[,dim]); (-1 if not found) vect vbsearch argc=2 z_v* idx = vbsearch(v,x); -- sorted vector : binary search vect vseq argc=2 v_vSii vseq(v,fun[,ifrom|1[,ito]]) -- v[i] := fun(v[i-1]) vect vset argc=2 v_vvii vset(v1,v2 [,lg [,ifrom]]) : v1 := v2 (with conversion) vect vperiod argc=1 z_vi period_starter_idx = vperiod(v [,idx|-1=none) -- see period.n vect vfindperiod argc=1 z_v idx = vfindperiod(v) (-1=none) vect vrotl argc=1 v_vi vrotl(v [,n|1]) -- rotate left n times vect vrotr argc=1 v_vi vrotr(v [,n|1]) -- rotate right n times vect vshiftl argc=2 v_v* vshiftl(v,rightpad) vect vshiftr argc=2 v_v* vshiftr(v,leftpad) vect vshow argc=1 v_v vshow(v) -- debug info vect vsize argc=1 z_v bytes = vsize(v) vect vfsum argc=1 *_vF vfsum(v,fun) = SUM[0..dim-1] fun(v[i]) vect vstart argc=1 z_vi vstart(v [,idx|0]) - start iterator - see vnext() vect vsum argc=1 *_v vsum(v) = SUM[0..dim-1] v[i] vect vprod argc=1 *_v vprod(v) = PROD[0..dim-1] v[i] vect vuncompact argc=1 v_v vuncompact(v) -- clear compacted vector vect vcompact argc=1 v_v vcompact(v) -- share adresses for same items vect vsort argc=1 v_v vsort(v) vect vswap argc=2 v_vv vswap(v1,v2) : v1 <--> v2 vect vswapij argc=3 v_vii vswapij(v,i,j) : v[i] <--> v[j] vect vtop argc=1 z_v idx = vtop(v); -1 --> empty v vect vtriml argc=1 v_v vtriml(v) : delete first (left) zeroes vect vtrimr argc=1 v_v vtrimr(v) : delete last (right) zeroes vect vtype argc=1 z_v type = vtype(v) -- see system.h vect vunion argc=3 v_vvv vunion(/* into */v,v1,v2) -- set union vect vuniq argc=1 v_v vuniq(v) -> suppress duplicates vect vxmul argc=3 v_vvv vxmul(v,a,b); -- v[i] := a[i]*b[i] complex iadd argc=3 v_v** iadd(/*into*/z,x,y) -- z := x+y complex iconj argc=2 v_v* iconj(/*into*/z,x) -- x=a+ib z:=a-ib complex idiv argc=3 v_v** idiv(/*into*/z,x,y) -- x = z*y + r complex iexp argc=2 v_v* iexp(/*into*/z,x) -- z := e**x complex iinv argc=2 v_v* iinv(/*into*/z,x) -- z := 1/x complex ilog argc=2 v_v* ilog(/*into*/z,x) -- x = e**z complex imov argc=2 v_v* imov(/*into*/z,x) -- z:= x complex imul argc=3 v_v** imul(/*into*/z,x,y) -- z:= x*y complex ineg argc=2 v_v* ineg(/*into*/z,x) -- z:= -x complex inorm argc=2 v_v* inorm(/*into*/z,x) -- x = a+ib z:= a**2+b**2 +0i complex ipolar argc=3 v_vff ipolar(/*into*/z,rho,theta) complex ipow argc=3 v_v** ipow(/*into*/z,a,b) -- z := a**b complex ipowi argc=3 v_v*i ipowi(/*into*/z,a,n) -- z := a**n complex isub argc=3 v_v** isub(/*into*/z,x,y) -- z:= x-y complex iset argc=3 v_v** iset(z,re,im) -- z := re + i*im complex imod argc=1 f_* mod = imod(x) -- x = a + ib , mod := sqrt(a**2+b**2) complex iarg argc=1 f_* theta = iarg(x) -- a = mod * cos(theta) mx mxaddcol argc=2 v_Mv mxaddcol(/*into*/M,v) mx mxaddmulrow argc=4 v_Mii_z mxaddmulrow(M,i,j,x [,modulo]) -- row[i] += row[j]* x mx mxcharact argc=3 v_vMM mxcharact(/*into*/P,/*into*/Madj,M): P(x) := det(XIn-M) mx mxcols argc=1 z_M n = mxcols(A) mx mxdet argc=1 *_M determinant = mxdet(A) mx mxdiag argc=1 v_Mii mxdiag(A[,dim[,idiag|1]]) -> A[i][i] := idiag mx mxdim argc=3 v_Mii mxdim(A,rows,cols) -> A [rows][cols] mx mxgetcol argc=3 v_vMi mxgetcol(/*into*/ v,/*from*/ A,j) mx mxgetrow argc=3 v_vMi mxgetrow(/*into*/ v,/*from*/ A,i) mx mxinvert argc=2 v_MM mxinvert(/*into*/X,A) -> X*A = A*X = I mx mxmaxcol argc=2 z_Mi idx = mxmaxcol(M,col) - returns index mx mxmincol argc=2 z_Mi idx = mxmincol(M,col) - returns index mx mxmaxrow argc=2 z_Mi idx = mxmaxrow(M,row) - returns index mx mxminrow argc=2 z_Mi idx = mxminrow(M,row) - returns index mx mxmul argc=3 v_MMM mxmul(C,A,B) -> C (m,p) := A (m,n) * B (n,p) mx mxmulrow argc=3 v_Mi_z mxmulrow(M,i,x [,modulo]) -- row[i] *= x mx mxgetperm argc=3 v_Mvv mxgetperm(/*into*/ perm_matrix,v1,v2); mx mxdoperm argc=3 v_Mvv mxdoperm(/*into*/ v2,perm_matrix,v1); -- v2:= perm_matrix*v1 mx mxpop argc=2 v_vM mxpop(/*into*/ vector, Matrix); mx mxpush argc=2 v_Mv mxpush(/*into*/ Matrix, vector); mx mxread argc=2 v_Msi mpz M[][n] ; mxread( /*into*/ M,filename [,cols]) mx mxrows argc=1 z_M m = mxrows(A) mx mxsetcol argc=3 v_Mvi mxsetcol(/*into*/ A,/*from*/ v,j) mx mxset argc=2 v_MM mxset(M1,M2) : M1 := M2 ( with conversion) mx mxsetrow argc=3 v_Mvi mxsetrow(/*into*/ A,/*from*/ v,i) mx mxsort argc=1 v_Mii mxsort(M [, column|0 [,sort]]); -- sort=1(asc)|-1(desc) mx mxswap argc=2 v_MM mxswap(m1,m2) : m1 <--> m2 mx mxswapij argc=5 v_Miiii mxswapij(A,i1,j1,i2,j2) mx mxswapcol argc=3 v_Mii mxswapcol(A,j1,j2) mx mxswaprow argc=3 v_Mii mxswaprow(A,i1,i2) mx mxtrace argc=1 *_M item = mxtrace(M) mx mxtrans argc=2 v_MM mxtrans(/*into*/T,A) -> transpose solve xsolve argc=3 v_MMM xsolve(/*into*/SOL,C,K) : C[n][n]*SOL[n][1] = K[n][1] solve isolve argc=2 v_MMMiMMii isolve(SOL,A[,B[,xtype[,Cmin[,Cmax[,max_sols[,max_steps]]] ]]]); see solve.n solve zsolve argc=2 v_MMMiMMii zsolve(SOL,A[,B[,xtype[,Cmin[,Cmax[,max_sols[,max_steps]]] ]]]); see solve.n solve mxlu argc=4 v_MMMM mxlu(/*into*/L,/*into*/U, /*into*/ PERM,A); -- PERM.A = L.U solve mxlusolve argc=5 v_MMMMM mxlup(/*into*/ X,L,U,PERM,B); -- PERM.A.X = L.U.X = PERM.B solve pslq argc=2 v_Mviii pslq(SOL,X[,digits[,max_iter[,sol_max]]]) -- see pslq.n solve xpslq argc=2 v_Mviizvv xpslq(SOL,X[,digits[,max_iter[,sol_max]]]) -- see pslq.n poly poly argc=1 v_vi poly(v[,degree]) : P(X)= v[n] X**d +.. v[1] X + v[0] -- makes poly from vector poly polyadd argc=3 v_PPP polyadd(/*into*/ P,P1,P2) poly polycomp argc=3 v_PPP polycomp(/*into*/ P,P1,P2) -> P(X):= P1(P2(X)) poly polyderiv argc=2 v_PP polyderiv/*into*/(D,P) -> D(X) = P'(X) poly polydiv argc=4 z_PPPP d = polydiv (/*into*/Q, /*into*/R,A,B) -> d*A == BQ + R poly polyint argc=2 v_PP polyint (/*into*/I,P) -> I'(X) = P(X) poly interpoly argc=2 z_PMi rc = interpoly(/*into*/P,Mxy[,degree]) - Lagrange interpolation poly polymul argc=3 v_PPP polymul(/*into*/ P,P1,P2) poly polynorm argc=1 v_Pz normalizes P(X) [mod m] poly polypow argc=3 v_PPi polypow(/*into*/ P,P1,n) poly polyval argc=2 *_P_ val = polyval(P ,x); or val = P(x); poly polyvalmod argc=3 z_Pzz polyvalmod(P,x,modulo) fpoly flex argc=2 z_MP n = flex(Mf,P) fpoly roots argc=2 z_vP n = roots(Vf,P) -> Vf[i] := i-th realroot fpoly imroots argc=2 z_MP n = imroots(Mf,P) -> Mf[i][2] := i-th Im root fpoly newtonp argc=2 f_Pfi root= newtonp(mypoly,x0[,verbose]) contf cf argc=1 v_vi mpz C[dim]; cf(C[,dim]); -> makes a continued fraction contf cfcall argc=2 q_Fi mpq q = cfcall(fun,nth) contf cfgetf argc=2 f_vi mpf x = cfgetf(C, nth) contf cfget argc=2 q_vi mpq q = cfget(C, nth) contf cfset argc=3 v_vfi cfset(/*into*/ C,x,dim) contf frac argc=1 q_fi q = frac(x [,max_iter]); -- |q - x| < EPSILON tree tree_apply argc=3 z_vFi tree_apply(tree,fun,node) - depth first tree tree_new argc=1 z_v tree_new(vector); tree tree_addson argc=3 z_vii tree_addson(v,node_idx,son_idx); tree tree_addbro argc=3 z_vii tree_addbro(v,node_idx,brother_idx); tree tree_getson argc=2 z_vi idx =tree_getson(v,node_idx); -1 = none tree tree_getbro argc=2 z_vi idx =tree_getbro(v,node_idx); -1 = none tree tree_getfat argc=2 z_vi idx =tree_getfat(v,node_idx); -1 = none tree tree_remnode argc=2 z_vi idx =tree_remnode(v,node_idx); -1 = fail fmath acos argc=1 f_f acos(x) --> [0,PI] fmath agm argc=2 f_ff arithmetic-geometric mean(x,y) fmath asin argc=1 f_f asin(x) --> [-PI/2,PI/2] fmath atan argc=1 f_f atan(x) --> [-PI/2,PI/2] fmath ceil argc=1 z_f ceil(PI) --> 4 fmath cos argc=1 f_f assert(cos(acos(x)) =# x) fmath cosh argc=1 f_f fmath exp argc=1 f_f exp(1.) = E. fmath f1 argc=1 f_z f1(n) -> 1. fmath fabs argc=1 f_f fabs(-666.) --> 666. fmath fdigits argc=0 z_i mpf_display_digits = fdigits([digits]) fmath precision argc=0 z_i mpf_internal_digits = precision([digits]) fmath funmax argc=3 f_Fffi x = funmax(F,xfrom,xto[,steps]) fmath funmin argc=3 f_Fffi x = funmin(F,xfrom,xto[,steps]) fmath funlim argc=2 f_Fffi fun_limit=funlim(F,x0[,range[,steps|10]]) -> limit|UNDEF|INFINITY fmath seqlim argc=2 f_Siii sequence_limit=seqlim(S,n0[,iter|1[,method|0]]) fmath serlim argc=2 f_Siii serie_limit=serlim(S,n0[,iter|1[,method|0]]) fmath finv argc=1 f_f finv(x) --> 1./x fmath fid argc=1 f_z fid(n) --> (mpf)n fmath floor argc=1 z_f floor(PI) --> 3 fmath nint argc=1 z_f n = nint(x); -- nearest integer fmath fpow argc=2 f_ff z = x**y ; ex: fpow(10.,0.5) fmath fproduct argc=3 f_Siii xp=fproduct(S,nfrom,nto[,step]) fmath frand argc=0 f_i frand([precision]) -->[0.00 .. 1.[ fmath fround10 argc=1 f_f x = fround10(y) --> x = 10**p, x >= y fmath fsigma argc=2 f_Sii fs=fsigma(S,nfrom[,nto|INFINITY]) fmath fsqrt argc=1 f_f fmath fzero argc=3 f_Fffi x0 = fzero(F,xfrom,xto[,steps]) fmath integrate argc=3 f_Fffi I = integrate(F,xfrom,xto [,maxsteps]) fmath isint argc=1 z_f isint(PI) --> 0 fmath ln argc=1 f_f ln(E)= 1. fmath log argc=1 f_f log(E)= 1. fmath lnln argc=1 f_f lnln(x) = ln(ln(x)) fmath log10 argc=1 f_f log10(100.) = 2. fmath mean argc=3 z_Fzz m = mean(fun_z,nfrom,nto) fmath newton argc=3 f_FFfi root= newton(F,F',x0[,verbose]) -- fun' is dfun/dx fmath round argc=1 z_f n=round(x) --> nearest integer fmath sin argc=1 f_f fmath sinh argc=1 f_f fmath reldiff argc=2 f_ff reldiff(x,y) --> abs(x-y)/x fmath tan argc=1 f_f fmath tanh argc=1 f_f fmath zeta argc=1 f_f zeta(s) = sigma[1...] 1/n**s padic hensel argc=3 v_vvi hensel(/*into*/pa,pb,digits) -- truncates padic padic argc=2 v_vi_ padic(pa,p [,val]) -- pa := new p-adic number padic padd argc=3 v_vvv padd(pa,pb,pc) -- pa := pb+pc padic pdigits argc=0 z_i pdigits(1000); pdigits() --> 1000 padic pdist argc=2 q_vv pdist(a,b) --> |a - b|p padic pdiv argc=3 v_vvv pdiv(pa,pb,pc) -- pa := pb/pc padic pformat argc=0 z_i pformat(0|1) -- see padic.n padic pget argc=1 q_v q = pget(pa) padic pmul argc=3 v_vvv pmul(pa,pb,pc) -- pa := pb*pc padic pmulq argc=2 v_vq pmulq(pa,q) -- pa *= q padic pneg argc=2 v_vv pneg(p1,p2); p1 := -p2 padic pnorm argc=1 q_v norm = pnorm(pa); padic prand argc=1 v_viii prand(pa,[digits[,p[integer|0]]]) padic pset argc=2 v_v_i pset(pa,val[,p]) padic psub argc=3 v_vvv psub(/*into*/pa,pb,pc) plot plot argc=3 z_Fzzzz plot(foo,nxmin,nxmax[,nymin,nymax]) plot fplot argc=3 z_Fffff fplot(foo,xmin,xmax[,ymin,ymax]) plot plot_open argc=0 z plot_open() plot plot_close argc=0 z plot_close() plot plot_dot argc=2 z_iiii plot_dot(nx,ny[,color][,dot]) plot plot_scroll argc=0 z_ii plot_scroll(xfrom,yfrom) plot polyplot argc=3 z_vffff polyplot(P,xmin,xmax[,ymin,ymax]) plot mxplot argc=1 z_Mffff mxplot(Mxy[,xmin,xmax[,ymin,ymax]]) util inverter argc=1 f_fi inverter(x[,digits|10]) -- S. Plouffe's inverter !! util mlook argc=1 z_s mlook('lucas number'); -- Wolfram Mathworld util oeis argc=1 v_vi oeis(mysequence [,items|10]); -- OEIS - look for a sequence // SYMBOLIC (alpha version) symb xrep argc=3 x_eee xrep(expr,old,new) -- replace symb D argc=1 x_ex D([expr[,var name]]) -- Derivation symb xform argc=1 x_ex xform([expr[,rules]]) -- reduce symb xpand argc=1 x_ex xpand([expr[,rules]]) -- expand puzz catprime argc=2 z_zi n=catprime(101,3) -> 101103105107 puzz catn argc=2 z_zz n= catn(666,42) -> 66642 puzz catv argc=1 z_v n = catv(vector) puzz digitmul argc=1 z_z digitmul(12345) -> 120 puzz digitsum argc=1 z_z digitsum(12345) -> 15 puzz explode argc=2 z_vz numdigits = explode(/*into*/v, n) puzz gbnext argc=1 z_z p = gbnext(p); -- OEIS: A124123 puzz implode argc=1 z_vi n = implode(/* from*/v [,numdigits]) puzz isemirp argc=1 z_z isemirp(17) -> 71 -- OEIS : A006567 puzz ispal argc=1 z_z ispal(123321) -> 1 puzz nthdec argc=2 z_fi nthdec(PI,4) -> 5 puzz match argc=2 z_zs match(n,regexp) - match(10**100+1,'1*1') -> 1 puzz rep argc=2 z_ii rep(71,42) --> 717171717171717....71 puzz reverse argc=1 z_z reverse(1234) -> 4321 // plotting with gnuplot // -> .load gnuplot.n gnuplot plotcmd argc=2 void plotcmd(mpz l =1, mpz dim3d = 0) // lines or points - 2D/3D gnuplot plotrange argc=4 void plotrange(mpf xfrom =0,mpf xto=0, mpf yfrom =0, mpf yto = 0) gnuplot plotdef argc=0 void plotdef(void) gnuplot funplot argc=4 void funplot(mpz fun(x), mpz xfrom, mpz xto, mpz _step = 0) gnuplot funplotp argc=4 void funplotp(mpz fun(x), mpz xfrom, mpz xto, mpz step=0) gnuplot funplotf argc=5 void funplotf(mpf fun(mpf x), mpf xfrom, mpf xto, mpf rot = 0.) gnuplot funplotf2 argc=4 void funplotf2(mpf fun(mpf x), mpf xfrom, mpf xto, mpf step = 0.) gnuplot funplotI argc=4 void funplotI(mpf fun(mpf x), mpf xfrom, mpf xto, mpf step = 0) gnuplot funplotf3 argc=3 void funplotf3(mpf fun(mpf dummy), mpf step, mpz withln = 1 ) gnuplot mxplotf3 argc=3 void mxplotf3(mpf M[][],line=0, wants_origin = 0) gnuplot polyplot argc=4 void polyplot(mpz P[], mpf xfrom, mpf xto, mpf step = 0.) gnuplot polyplotf argc=4 void polyplotf(mpf P[], mpf xfrom, mpf xto, mpf step =0.) gnuplot polarplotf argc=4 void polarplotf(mpf ro(mpf), mpf thetafrom =0, mpf thetato=3.15) gnuplot paramplotf argc=6 void paramplotf(mpf fX(mpf), mpf fY(mpf), mpf tfrom =0, mpf tto=10, mpf rotation = 0) gnuplot paramplotf3 argc=7 void paramplotf3(mpf fX(mpf), mpf fY(mpf), mpf fZ(mpf), mpf zsym= 0 ) gnuplot mxplot argc=2 void mxplot(mpz M[][],ln = 0) gnuplot mxplotui argc=2 void mxplotui(uint M[][],ln = 0) gnuplot mxplotf argc=1 void mxplotf(mpf M[][]) gnuplot vplot argc=5 void vplot(mpz V[], mpz ln = 1 , plotlog=0, mpz ifrom = 0, mpz ito = 0) gnuplot vplotui argc=4 void vplotui(uint V[], mpz ln = 1 , mpz ifrom = 0, mpz ito = 0 ) gnuplot vplotf argc=4 void vplotf(mpf V[], mpz ln = 1 , mpz ifrom = 0, mpz ito = 0 ) gnuplot multiplot argc=1 void multiplot(what) // 1=on 0=OFF gnuplot plotdata argc=3 void plotdata(string datafile= PLOTDATADEF, ln =1, dim3d = 0) gnuplot average argc=3 void average (mpf v[], mpz n =2 , mpz k = 1) gnuplot smooth argc=3 void smooth(mpf x[], mpz n = 2, k=1) // smooth k times -- 2*n+1 points /*------------------------------------------------------------ top-level commands -------------------------------------------------------------*/ .asl asl [line num] : assembly code [0...10000] .cons show constants .dbg sets DEBUG options. see system.h [0...255] .def .def [substring] : show #define macros .dir dir .display disp [0...1000] .edit .edit [|last loaded] : opens with EDITOR .env environment variables .expand .expand [function] .fdigits # of digits for mpf display [2...4096] .freg show F registers [0...32] .fun user functions : .fun [susbstring|regexp] .gc info about gc() .grep grep in *.n files .group group decimal digits by [0..n] [0...100] .hist show history [n|10] : $0,$1,..$n [0...100] .load load and compile . run 'main()' if any. .mail send a question or a bug report .mem show memory use .more more .obj obj [function name] : assembly code .ops .ops[str] : show operators .pack .pack [packname] : show package .paste .paste : append last function definition .precision mpf precision [2...4096] .quit .qreg show Q registers [0...32] .qtof display mpq also as mpf - # of digits or 0 [0...4096] .reg show Z (R) registers [0...32] .save save : all usr. variables into .search search in *.n files .simplify .simplify [function] .source .source : last source file around line | 0=all [0...10000] .stack show stack (function calls) when in BREAK() .sym user symbols: .sym 0=globs 1=all [0...1] .sys system functions : .sys [susbstring|regexp] .top return to top level from BREAK() .tree show parse tree [0...10000] .var user variables and values : .var [susbstring|regexp] .version show version number .vformat vector format 0=STD, 1 = CSV [0...1] .who all symbols : .who [susbstring|regexp] .vitems # of items for vector display (0=all items) [0...1000] .zdigits # of digits for mpz display (0=all digits) [0...4000] .xclear clears ALL symbols & functions