題目大意:
給你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 ...