【Ⅰ】给出 阶矩阵的行列式:
,
那么则易知, .
【Ⅱ】给出这个 阶矩阵的行列式:
那么易知, .
【Ⅲ】给出这个 阶矩阵的行列式:
,
我们让 , , , , , ,其它 .
则可以计算出, .
【Ⅳ】这是一个 阶矩阵的行列式( ):
,
从而可以知道,对于任何一个这样的 ,都有 .
【Ⅴ】给出一个 阶矩阵的行列式:
,
其中 ,这样的话,那么则易知, .
【Ⅵ】最后给出一个 阶矩阵的行列式:
,
那么就易知 .
容易验证:
代码:(因为是随便写的所以不要在意细节啦~
#include <cstdlib> #include <algorithm> #include <iostream> #include <mutex> #include <vector> #include <thread> using i64 = long long; template <typename T> T solve(const T* data, std::size_t n) { std::vector<std::size_t> v(n); for(std::size_t i = 0; i < n; ++i) v[i] = i; T result = 0; do { T x = 1; for(std::size_t i = 0; i < n; ++i) x *= data[i * n + v[i]]; bool sign = false; for(std::size_t i = 0; i < n - 1; ++i) for(std::size_t j = i + 1; j < n; ++j) sign ^= v[i] > v[j]; if(sign) result -= x; else result += x; } while(std::next_permutation(v.begin(), v.end())); return result; } const int N = 4; const int TABLE[] = {1, 11, 114, 5, 51, 514}; std::mutex mutex; void dfs(int depth, i64* arr) { if(depth == N * N) { if(solve(arr, N) == 5201314) { std::lock_guard<std::mutex> lock(mutex); std::cout << ">=======
"; for(int i = 0; i < N * N; ++i) std::cout << arr[i] << "
"[i % N == N - 1]; std::cout << "<=======
"; std::cout << std::endl; } return; } if(arr[depth] != 0) dfs(depth + 1, arr); else for(int x : TABLE) { arr[depth] = x; dfs(depth + 1, arr); arr[depth] = 0; } } int main() { std::vector<std::thread> threads; for(int x : TABLE) threads.emplace_back([=]() { i64 arr[N * N] = { x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 8, 10, }; dfs(0, arr); }); for(auto&& thread : threads) thread.join(); }