Topic Transfer: UVA-10229
Idea: The simple matrix quickly powers the Fibonacci sequence, then notice that the intermediate result can explode int, because 2^19 has more than 500,000
AC Code:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include < cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set > #include <deque> #include <cctype> #define LL long long#define INF 0x7fffffffusing namespace Std;int mp[20 ]; LL N, m;void init () {mp[0] = 1;for (int i = 1; i <; i + +) {Mp[i] = 2 * mp[i-1];}} struct Matrix {LL m[2][2];}; Matrix Ans;matrix base = {1, 1, 1, 0};matrix multiply (matrix A, matrix B, LL MOD) {matrix ret;for (int i = 0; i < 2; i + +) {for (int j = 0; J < 2; J + +) {Ret.m[i][j] = 0;for (int k = 0; k < 2; k + +) {Ret.m[i][j] = (Ret.m[i][j] + a.m[i][k) * B.m[k][j])% MOD;}}} return ret;} LL Kmod (Matrix A, ll N, ll MOD) {Matrix ans = {1, 0, 0, 1};while (n) {if (n & 1) ans = multiply (ans, a, mod); a = Multipl Y (A, A, MOD); n >>= 1;} return ans.m[0][1];} int main () {init (); while (Cin >> n >> m) {cout << kmod (base, N, Mp[m]) ≪< Endl;} return 0;}
Uva-10229-modular Fibonacci (Matrix fast Power + Fibonacci)