51nod 1343 行列式的根

这题分块搞一搞,算到最后发现结果就是算矩阵J的行列式,要取模m,那个sign消掉了。
参考文献在这,欧几里德算法的应用,金斌
代码还是比较好写的,python代码

n,m=map(int,raw_input().split())
a=[]
for i in range(n):
    a.append(list(map(int,raw_input().split())))
def det(a):
    ans=1
    for i in range(n):
        for j in range(i+1,n):
            while a[j][i]!=0:
                t=a[i][i]//a[j][i]
                for k in range(i,n):
                    a[i][k]=(a[i][k]-a[j][k]*t)%m
                    a[i][k],a[j][k]=a[j][k],a[i][k]
                ans*=-1
        if a[i][i]==0:
            return 0
        else:
            ans=ans*a[i][i]%m
    return ans%m

print(det(a)%m)
posted @ 2017-02-04 00:52  czp001  阅读(307)  评论(0编辑  收藏  举报