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))
この記事が気に入ったらサポートをしてみませんか?