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