高斯消元 異或線性方程組,數論 HDU5833

2021-10-13 15:45:51 字數 1690 閱讀 1877

題目大意:

給你n個數,問你有多少種方案使得選出乙個子集使得其累乘值為完全平方數.

n

≤300,a

i≤1e

18且ai

所含最大

質因數≤

2000

n \leq 300,a_i \leq 1e18且a_i所含最大質因數 \leq 2000

n≤300,

ai​≤

1e18

且ai​

所含最大

質因數≤

2000

題目思路:

乙個數為完全平方數,那麼其每個質因數的指數均為偶數

對於每個質數我們列乙個異或線性方程.設x

ix_i

xi​為是否選第i

ii個數.

所以我們有n

nn個未知數,π

(2000

)\pi(2000)

π(2000

)個方程.答案就是2fr

ee

2^2f

ree.

那f [i

][j]

f[i][j]

f[i][j

]的係數就是第j個數中含有 奇數個(1)還是偶數(0)個pri

me[i

]prime[i]

prime[

i]高斯消元求自由元即可.

ac**:

#include

using

namespace std;

#define ll long long

const

int mod =

1000000007

;bool isp (

int x)

ll p[

1000

], cnt;

ll b[

305]

;bitset<

305> a[

305]

;ll ksm (ll a , ll b)

return ans;

}int

main()

int t; cin >> t;

int gg =0;

while

(t--

)for

(int i =

1; i <= cnt ; i++

) a[i]

[j]=

(now %2)

;}}// guess

int r , c , free =0;

for(r = c =

1; r <= cnt && c <= n; r++

, c++)if

(!p)

swap

(a[p]

, a[r]);

for(

int j =

1; j <= cnt ; j++)}

cout <<

"case #"

<<

(++gg)

<<

":"<< endl;

cout <<

(ksm

(2ll

, free)-1

+ mod)

%mod << endl;

}return0;

}

線性方程組(高斯消元)

acm模版 列主元gauss消去求解a x b 返回是否有唯一解,若有解在b中 define fabs x x 0 x x define eps 1e 10 const int maxn 100 int gausscpivot int n,double a maxn double b if fabs...

高斯消元法解異或線性方程組

對於一組線性方程組,列舉每一列進行如下步驟 1 找到首元非零行 2 將這一行交換到第一行 3 將這一行的第乙個數變成1,對當前這一行進行操作,不涉及矩陣的初等變換 4 將下面所有行的當前列全部消成0,利用矩陣的初等變換 對於原異或方程組進行變換後 如果得到的矩陣是乙個完美的上三角矩陣,則說明方程組有...

高斯消元解線性方程組

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