#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; } |
English