14 lines
281 B
Text
14 lines
281 B
Text
matperm(M)=
|
|
{
|
|
my(n=matsize(M)[1],innerSums=vectorv(n));
|
|
if(n==0, return(1));
|
|
sum(x=1,2^n-1,
|
|
my(k=valuation(x,2),s=M[,k+1],gray=bitxor(x, x>>1));
|
|
if(bittest(gray,k),
|
|
innerSums += s;
|
|
,
|
|
innerSums -= s;
|
|
);
|
|
(-1)^hammingweight(gray)*factorback(innerSums)
|
|
)*(-1)^n;
|
|
}
|