#include <iostream> using namespace std; int main() { int m, n, p; cin >> n >> m >> p; int trojkontowa = 1; int zmienTrojkont = 2; int mMniej = m-1; int mDoda = m; int nRet = n; int mRet = m; long long wynikowa =0; wynikowa += mDoda; wynikowa = wynikowa % p; mDoda = wynikowa % p; while (n != 1) { while (m != 1) { wynikowa += mDoda; wynikowa = wynikowa % p; m--; } mDoda = wynikowa % p; m = mRet; n--; } //std:: cout << wynikowa << endl; n = nRet; m = mRet; wynikowa = wynikowa % p; int ileRaz = 1; while (mMniej!=0) { ileRaz++; //std::cout << wynikowa<<", "<<m<<", "<<n<<", "; //wynikowa += pow(m + trojkontowa, n - 1)*mMniej; int Mtroj = ileRaz*m - trojkontowa; int mtrojRet = Mtroj; int mDoda2 = Mtroj; int mMRet = mMniej; long long wynikowa2 = 0; wynikowa2 += mDoda2; wynikowa2 = wynikowa2 % p; mDoda2 = wynikowa2 % p; while (n != 2) { while (Mtroj != 1) { wynikowa2 += mDoda2; wynikowa2 = wynikowa2 % p; Mtroj--; } mDoda2 = wynikowa2 % p; Mtroj = mtrojRet; n--; } //std::cout << wynikowa << ", " << m << ", " << n << ", "; n = nRet; int zPot = wynikowa2%p; while (mMniej != 1) { mMniej--; wynikowa2 += zPot; wynikowa2 = wynikowa2 % p; } mMniej = mMRet; mMniej--; wynikowa2 = wynikowa2 % p; trojkontowa = zmienTrojkont + trojkontowa; zmienTrojkont++; wynikowa = (wynikowa + wynikowa2); wynikowa = wynikowa % p; } std::cout << wynikowa; }
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <iostream> using namespace std; int main() { int m, n, p; cin >> n >> m >> p; int trojkontowa = 1; int zmienTrojkont = 2; int mMniej = m-1; int mDoda = m; int nRet = n; int mRet = m; long long wynikowa =0; wynikowa += mDoda; wynikowa = wynikowa % p; mDoda = wynikowa % p; while (n != 1) { while (m != 1) { wynikowa += mDoda; wynikowa = wynikowa % p; m--; } mDoda = wynikowa % p; m = mRet; n--; } //std:: cout << wynikowa << endl; n = nRet; m = mRet; wynikowa = wynikowa % p; int ileRaz = 1; while (mMniej!=0) { ileRaz++; //std::cout << wynikowa<<", "<<m<<", "<<n<<", "; //wynikowa += pow(m + trojkontowa, n - 1)*mMniej; int Mtroj = ileRaz*m - trojkontowa; int mtrojRet = Mtroj; int mDoda2 = Mtroj; int mMRet = mMniej; long long wynikowa2 = 0; wynikowa2 += mDoda2; wynikowa2 = wynikowa2 % p; mDoda2 = wynikowa2 % p; while (n != 2) { while (Mtroj != 1) { wynikowa2 += mDoda2; wynikowa2 = wynikowa2 % p; Mtroj--; } mDoda2 = wynikowa2 % p; Mtroj = mtrojRet; n--; } //std::cout << wynikowa << ", " << m << ", " << n << ", "; n = nRet; int zPot = wynikowa2%p; while (mMniej != 1) { mMniej--; wynikowa2 += zPot; wynikowa2 = wynikowa2 % p; } mMniej = mMRet; mMniej--; wynikowa2 = wynikowa2 % p; trojkontowa = zmienTrojkont + trojkontowa; zmienTrojkont++; wynikowa = (wynikowa + wynikowa2); wynikowa = wynikowa % p; } std::cout << wynikowa; } |