int main(void) { // Check/Test with provided, complex, matrix unsigned int n = 3; // size of matrix unsigned int k = 9; // power double PI = M_PI; // from math.h std::complex<double> I = std::complex<double>(0,1); // imaginary unit Eigen::MatrixXcd A(n,n); for(unsigned int i = 0; i < n; ++i) { for(unsigned int j = 0; j < n; ++j) { A(i,j) = exp(2. * PI * I * (double) i * (double) j / (double) n) / sqrt((double) n); } } // Test with simple matrix/simple power // Eigen::MatrixXd A(2,2); // k = 3; // A << 1,2,3,4; // Output results std::cout << "A = " << A << std::endl; std::cout << "Eigen:" << std::endl << "A^" << k << " = " << A.pow(k) << std::endl; matPow(A, k); std::cout << "Ours:" << std::endl << "A^" << k << " = " << A <<std::endl; }
int main(){ int n; LL a[N][N]; memset(a, 0, sizeof(a)); while (scanf("%d", &n)){ for (j = 0; j < N; j++) a[7 - j ][j] = 1; a[7][6] = 1; a[6][7] = 1; a[7][3] = 1; a[3][7] = 1; matPow(a, n); printf("%lld\n", a[7][7] % MOD); } }