MaximaでMathematica組み込みシンボルを実装していく

自作関数一覧

  • PowerMod(a,b,p):=map(lambda([u],power_mod(a,u,p)),b)$

  • MemberQ(a,b):=map(lambda([u],member(u,b)),a)$

  • Primitiveroot(n):=block(
    [a:[],i,j:makelist(i,i,1,n-1)],for i:2 thru n-1 do (
    if is(sort(PowerMod(i,j,n))=j) then a:endcons(i,a)),a)$

  • PowerMod1(a,b,m):=map(lambda([u],power_mod(u,b,m)),a)$
    PowerMod2(a,b,m):=map(lambda([u],PowerMod1(a,u,m)),b)$

  • PrimitiveRoot(p):=block([i,l:[],j,M],
    j:makelist(i,i,1,p-1),
    M:transpose(apply(matrix,PowerMod2(j,j,p))),
    for i:1 thru p-1 do
    (if length(unique(M[i]))=p-1 then l:endcons(i,l) ) ,l)$

  • Ind(p,m):=block([g,j],
    j:makelist(i,i,1,p-1),
    g:[PrimitiveRoot(p)[1]],
    return(sublist_indices(flatten(PowerMod2(g,j,p)),lambda([u],u=m))) )$

  • Jacobi(a,b):=map(lambda([u],jacobi(u,b)),a)$
    Jacobi2(a,b):=map(lambda([u],Jacobi(a,u)),b)$
    Jkekka(n):=Jacobi(makelist(i,i,1,n-1),n)$
    J_ichi(n):=sublist_indices(Jkekka(n),lambda([u],is(u=1)))$
    J_kai(a,p):=
    block([i],for i:2 thru p-1 do
    (if is(mod(i^2,p)=a) then print(i)))$

  • Take(lis,n):=if n>0 then rest(lis,n-length(lis))
    else rest(lis,length(lis)+n)$

  • Nest(f,x,n):=block([a:[x],i],for i:1 thru n do (a:map(f,a)),a)$

  • Nestlist(f,x,n):=block([a,i],a:[x],for i:1 thru n do
    (a:endcons(map(f,[a[i]])[1],a)),a)$

  • Prime(n):=block([a],for i:1 thru n do(a:next_prime(i)),a)$

  • EulerPhi(n):=map(lambda([u],totient(u)),n)$


■ポイント

  • Listable属性をつけると便利(引数に数値でなくリストごと取り込めると便利)

  • makelist([f(i),g(i)],i,1,10,1/2)とすることも可能

  • matrix(makelist(f(i),i,1,10))では無理。matrix([[]])となるから。

  • 正しくはmatrix([a,b],[c,d]) または apply(matrix,makelist(f(i),i,1,10))



この記事が気に入ったらサポートをしてみませんか?