#include<iostream> using namespace std; long long result[1000][1000] = { 0 }; long long getPot2(int n, long long p) { long long pot2 = 1; for (int i = 0; i < n - 1; i++) { pot2 *= 2; pot2 %= p; } return pot2; } int main() { int n, k; long long p; cin >> n >> k >> p; if (k == 0 || (n < 3 && k > 1) || (n < 5 && k > 2) || (n < 9 && k > 3) || (n < 17 && k > 4) || (n < 33 && k > 5) || (n < 65 && k > 6) || k > 10) { cout << 0; } else if (k == 1) { cout << getPot2(n, p) % p; } else { result[3][2] = 2; result[4][2] = 16; result[5][2] = 100; result[6][2] = 616; result[7][2] = 4024; result[8][2] = 28512; result[9][2] = 219664; result[10][2] = 1831712; result[11][2] = 16429152; result[12][2] = 157552000; result[13][2] = 1606874944; result[5][3] = 4; result[6][3] = 72; result[7][3] = 952; result[8][3] = 11680; result[9][3] = 142800; result[10][3] = 1788896; result[11][3] = 23252832; result[12][3] = 315549312; result[13][3] = 188893632; result[9][4] = 160; result[10][4] = 7680; result[11][4] = 233792; result[12][4] = 5898240; result[13][4] = 136280832; cout << result[n][k] % p; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include<iostream> using namespace std; long long result[1000][1000] = { 0 }; long long getPot2(int n, long long p) { long long pot2 = 1; for (int i = 0; i < n - 1; i++) { pot2 *= 2; pot2 %= p; } return pot2; } int main() { int n, k; long long p; cin >> n >> k >> p; if (k == 0 || (n < 3 && k > 1) || (n < 5 && k > 2) || (n < 9 && k > 3) || (n < 17 && k > 4) || (n < 33 && k > 5) || (n < 65 && k > 6) || k > 10) { cout << 0; } else if (k == 1) { cout << getPot2(n, p) % p; } else { result[3][2] = 2; result[4][2] = 16; result[5][2] = 100; result[6][2] = 616; result[7][2] = 4024; result[8][2] = 28512; result[9][2] = 219664; result[10][2] = 1831712; result[11][2] = 16429152; result[12][2] = 157552000; result[13][2] = 1606874944; result[5][3] = 4; result[6][3] = 72; result[7][3] = 952; result[8][3] = 11680; result[9][3] = 142800; result[10][3] = 1788896; result[11][3] = 23252832; result[12][3] = 315549312; result[13][3] = 188893632; result[9][4] = 160; result[10][4] = 7680; result[11][4] = 233792; result[12][4] = 5898240; result[13][4] = 136280832; cout << result[n][k] % p; } return 0; } |