proc det_minor(matrix a,int n){ int c,ones; int small,new_small; int sig0,sig0s,s,u,v,b1,b2; int l,j,k,m,r; matrix x[1][n]; matrix y[1][n]; matrix q[1][n]; matrix ct[n][n+1]; if(n==1){ return a[1,1]; } ct[1,1]=1; ct[1,2]=1; for(l=2;l<=n;l++){ ct[l,1]=1; for(j=2;j<=l;j++){ ct[l,j]=ct[l-1,j-1]+ct[l-1,j]; } ct[l,l+1]=1; } matrix p[1][n]; for(l=1;l<=n;l++){ p[1,n-l+1]=a[1,l]; } sig0s=-1; for(l=2;l<=n;l++){ for(k=1;k<=l;k++){ x[1,k]=1; } for(k=l+1;k<=n;k++){ x[1,k]=0; } for(k=1;k<=n;k++){ y[1,k]=0; } r=int(ct[n,l+1]); matrix p0[1][r]; k=l; m=1; while(k!=0){ k=1; for(j=1;j<=n;j++){ if(x[1,j]==1){ q[1,k]=j; k=k+1; } } sig0=sig0s; s=r-m+1; p0[1,s]=0; for(j=1;j<=l;j++){ u=1; v=l-1; b1=n-1; for(k=l;k>j;k--){ for(b2=b1;b2>=q[1,k];b2--){ u=u+int(ct[b2,v]); } b1=b2-1; v--; } for(k=j-1;k>0;k--){ for(b2=b1;b2>=q[1,k];b2--){ u=u+int(ct[b2,v]); } b1=b2-1; v--; } p0[1,s]=p0[1,s]+(sig0*a[l,int(q[1,j])])*p[1,u]; sig0=-sig0; } m=m+1; for(k=1;k<=n;k++){ if(x[1,k]!=0){ break; } } small=k; c=1; for(k=small;(c!=0) && (k<=n);k++){ if(x[1,k]==1 && c==1){ x[1,k]=0; } else{ if(x[1,k]==0 && c==1){ x[1,k]=1; c=0; } } } for(k=1;k<=n;k++){ if(x[1,k]!=0){ break; } } new_small=k; if(new_small<=n){ ones=new_small-small-1; for(k=1;k<=ones;k++){ x[1,k]=int(x[1,k]) || 1; } } for(k=n;k>=1;k--){ if(x[1,k]!=y[1,k]){ break; } } } p=p0; sig0s=-sig0s; } return(p[1,1]); } proc user_srem(poly a,poly x,int l){ int i,s; matrix a0; poly p; a0=coeffs(a,x); s=size(a0); p=0; for(i=1;i<=l;i++){ if(s>=i){ p=p+a0[i,1]*x^(i-1); } } return(p); } proc user_coef(poly a,poly x,int l){ int i; matrix a0; a0=coeffs(a,x); if(size(a0)=n){ l=m; s=n; } else{ l=n; s=m; t=a; a=b; b=t; } matrix mat[l][l]; for(i=0;i<(l-s);i++){ for(j=0;j<=s;j++){ mat[i+1,j+i+1]=user_coef(b,x,j); } } b=x^(l-s)*b; f=user_srem(a,x,l); g=user_srem(b,x,l); h=user_coef(a,x,l)*g-user_coef(b,x,l)*f; for(j=0;j(l-s);i--){ h=x*user_srem(h,x,l-1)+user_coef(a,x,i)*g-user_coef(b,x,i)*f; for(j=0;j