• 垃圾行列式 学习笔记


    这东西坑人……

    整数

    一般会要求取模,而且模数不一定是质数。

    void Dswap(int N,int p,int q){
    	rep(i,1,N)swap(a[p][i],a[q][i]);
    }
    
    void deter(int N){
    	bool fu=0;
    	rep(i,1,N){
    		int wei=i;bool flag=0;
    		rep(j,i,N){
    			if(a[j][i]&&!flag)flag=1;
    			if(a[j][i]&&a[j][i]<a[wei][i])wei=j;
    		}
    		if(!flag){ans=0;return;}
    		if(i!=wei)Dswap(N,i,wei),fu=1-fu;
    		rep(j,i+1,N){
    			if(a[j][i]>a[i][i]){Dswap(N,i,j);fu=1-fu;}
    			while(a[j][i]){
    				lon tmp=a[i][i]/a[j][i];
    				rep(k,i,N)a[i][k]=(a[i][k]+(mo-tmp)*a[j][k])%mo;				
    				Dswap(N,i,j);
    				fu=1-fu;
    			}
    		}
    		ans=ans*a[i][i]%mo;
    	}
    	if(fu)ans=(-ans+mo)%mo;
    }
    
    

    常数小,但是不能处理模数不是质数的情况:(有锅待修,先别用!!)

    void Dswap(int N,int p,int q){
    	rep(i,1,N)swap(a[p][i],a[q][i]);
    }
    
    void deter(int N){
        bool fu=0;
    	rep(i,1,n){
    		rep(j,i+1,n)while(a[j][i]){
    			lon tmp=a[i][i]/a[j][i];
    			rep(k,i,n)a[i][k]=(a[i][k]-tmp*a[j][k]%mo+mo)%mo;
    			Dswap(N,i,j);
    			fu=1-fu;
    		}
    		ans=(ans*a[i][i]%mo+mo)%mo;
    	}
    	if(fu)ans=(-ans+mo)%mo;
    }
    

    小数

    注意精度,所以判断 0 的方式是 fabs(a)>eps 而不是 a==0。(eps=1e-15)

    void Dswap(int N,int p,int q){
    	rep(i,1,N)swap(a[p][i],a[q][i]);
    }
    
    void deter(int N){
    	bool fu=0;
    	rep(i,1,N){
    		int wei=i;
    		rep(j,i,N)if(zro(a[j][i])){wei=j;break;}
    		if(i!=wei)Dswap(N,i,wei),fu=1-fu;
    		rep(j,i+1,N){
    			while(zro(a[j][i])&&zro(a[i][i])){
    				if(a[j][i]>a[i][i]){Dswap(N,i,j);fu=1-fu;}
    				lod tmp=a[j][i]/a[i][i];
    				rep(k,i,N)a[j][k]=a[j][k]-tmp*a[i][k];
    			}
    			if(!zro(a[i][i]))Dswap(N,i,j),fu=1-fu;
    		}
    		ans=ans*a[i][i];
    	}
    	if(fu)ans=-ans;
    }
    
  • 相关阅读:
    PHP入门
    requests中text,content,json之间的区别
    有关pip报错的问题

    pycharm操作
    python selenium 相关操作
    python tkinter菜单
    初识Go
    Python _easygui详细版
    easygui _1
  • 原文地址:https://www.cnblogs.com/BlankAo/p/14263643.html
Copyright © 2020-2023  润新知