jzoj3823 遇見 高斯消元解異或方程組

2021-07-26 02:24:37 字數 1290 閱讀 3117

description

zyh獨自一人在街上漫步。zyh相信不久後應該就可以和她一起漫步,可是去**尋找那個她呢?zyh相信每個人都有乙個愛情的號碼牌,這個號碼牌是乙個n*n的矩陣。

每個人都要在矩陣中選擇若干個元素,使得每行每列都有奇數個數被選中,且選中的數字的乘積是完全平方數。每當選出了這若干個元素,他/她就能找到那個她/他。

zyh想知道對於乙個號碼牌有多少種選擇的方法,使得zyh能夠不再孤獨。由於這個數字很大,只要輸出對1,000,000,007取模後的餘數即可。

分解質因數後,就是裸的高斯消元求自由元個數。

質因數個數就算最大也只有3000個左右,因為每乙個最多就10個,而且往後還是會越來越少以至於每個都是1的。

注意判斷無解的情況,所有係數都為0,但結果=1

#include 

#include

#include

#include

#define mo 1000000007

#define mxn 31

#define hc 10000007

#define zz(x,y) (((x)-1)*n+(y))

typedef

long

long ll;

using

namespace

std;

int ans,n,a[mxn][mxn],h[hc],bz[hc],o,loc,st[mxn],now,mxf,tot,pr[5000];

int g[5000][901],us[5000];

int hash(int x)

if (h[loc]==0) tot++,pr[tot]=x;

h[loc]=x;

return loc;

}ll ksm(ll x,ll y)

int f0,s;

void solve()

if (f0==0)

us[f0]=true;

for (int j=1; j<=tot; j++)

if (us[j]==0 && g[j][i]==1)

for (int j=1; j<=tot; j++) }}

}}int main() }}

if (t!=1)

}for (int i=1; i<=n; i++)

for (int i=1; i<=n; i++)

solve();

cout

<2,ans)<}

高斯消元 解求精技術 Python

最近剛學習了高斯消元,老師要求我們用python實現高斯消元的解求精技術。所謂高斯消元的解求精技術主要包含以下三種 在方程的規範化過程中,會出現除零的問題。所謂除零問題,就是 在方程組相應的係數矩陣中,主對角線的值出現0或全為0時,用程式設計方式實現高斯消元法時,就要對各個方程的順序進行調整,稱為除...

高斯消元解xor方程 poj1830

莫隊長最喜歡的一類東西。上次聽賴神講線性相關之前,莫隊長說他講的高斯消元最簡單,一開始不信,後來賴神講了之後。呃 其實賴神講的也不是很難接受,但聽他講了之後現在卻沒什麼印象了,果然跨度還是太大了。poj1830 典型的xor方程組,每個開關根據與其他開關關係建立方程,其跟自己肯定相關,相關係數為1,...

高斯消元解線性方程組

高斯消去法是消去法的一種特殊形式,它包括消元和回帶兩個過程。高斯消去法求解線性方程組分為以下兩大步 1 將係數矩陣a經過一系列的初等行變換程式設計右上三角矩陣,其常數向量b也同時做相應的變換,即 在變換過程中,採用原地工作,即經變換後的元素仍存放在原來的儲存單元中。為了實現上述目標,對於k從1到n ...