First posted code is wrong please ignore:) Couldn't figure how to edit my 
post. 

#calculates matrix inverse modulo N
function minvmod{T<:Integer}(Arr::Array{T,2},N)
    A=copy(Arr)
    n=size(A)[1]
    Ainv=eye(T,n)
    for i=1:n
        k=i
        isz=true
        while isz 
            if gcd(A[k,i],N) == 1
                isz=false
                if k!=i
                    A[i,:],A[k,:]=A[k,:],A[i,:]
                    Ainv[i,:],Ainv[k,:]=Ainv[k,:],Ainv[i,:]
                end
            else
                k+=1
            end
            if k>n
                return false
            end
                
        end
        if N != 2
            tem=invmod(A[i,i],N)
            for j=1:n
                A[i,j]   =convert(T,mod(tem*A[i,j],N)) 
                Ainv[i,j]=convert(T,mod(tem*Ainv[i,j],N)) 
            end
        end
        
        for j=union(1:i-1,i+1:n)
            if A[j,i] != convert(T,0)
                tem=A[j,i]
                for k=1:n
                    A[j,k]   =convert(T,mod(A[j,k]-tem*A[i,k],N))
                    Ainv[j,k]=convert(T,mod(Ainv[j,k]-tem*Ainv[i,k],N))
                end
          
            end
        end
    
    end
    return Ainv
end

Reply via email to