#include <iostream> using namespace std; long long power(int a, int b) { long long wynik = a; for (int i = 1; i < b; i++) { wynik *= a; } if (b == 0) { return 1; } return wynik; } long long factorial(int n) { long long wynik = 1; for (int i = n; i >= 1; i--) { wynik *= i; } return wynik; } long long newton_sign(int k, int n) { long long wynik = 1; wynik = factorial(k) / (factorial(n) * factorial(k - n)); return wynik; } int main() { long long wynik = 0; int m = 0; int k = 0; cin >> m >> k; long long mod = power(10, 9) + 7; int liczba_par = (m - 2) / 2; if (k == 2 and liczba_par % 2 == 0) { liczba_par--; } wynik += k * power(k, m - 2) % mod; unsigned long long temp = k * (k - 1); long long pary = 0; for (int i = 1; i <= liczba_par; i++) { pary += newton_sign(m - 3, liczba_par) * power(k, m - 2 - (2 * liczba_par)); } temp = (temp * pary)%mod; wynik = (wynik + temp) % mod; if (m == 1) { cout << 1; } else { cout << wynik << endl; } }
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 | #include <iostream> using namespace std; long long power(int a, int b) { long long wynik = a; for (int i = 1; i < b; i++) { wynik *= a; } if (b == 0) { return 1; } return wynik; } long long factorial(int n) { long long wynik = 1; for (int i = n; i >= 1; i--) { wynik *= i; } return wynik; } long long newton_sign(int k, int n) { long long wynik = 1; wynik = factorial(k) / (factorial(n) * factorial(k - n)); return wynik; } int main() { long long wynik = 0; int m = 0; int k = 0; cin >> m >> k; long long mod = power(10, 9) + 7; int liczba_par = (m - 2) / 2; if (k == 2 and liczba_par % 2 == 0) { liczba_par--; } wynik += k * power(k, m - 2) % mod; unsigned long long temp = k * (k - 1); long long pary = 0; for (int i = 1; i <= liczba_par; i++) { pary += newton_sign(m - 3, liczba_par) * power(k, m - 2 - (2 * liczba_par)); } temp = (temp * pary)%mod; wynik = (wynik + temp) % mod; if (m == 1) { cout << 1; } else { cout << wynik << endl; } } |