OSDN Git Service

把循环边界统一为 sz 而非常数 3 (#695)
authorAnguei <42708316+Anguei@users.noreply.github.com>
Thu, 1 Nov 2018 01:44:19 +0000 (09:44 +0800)
committerXeonacid <h.dwwwwww@gmail.com>
Thu, 1 Nov 2018 01:44:19 +0000 (09:44 +0800)
docs/math/matrix.md

index ebeea30..01befdd 100644 (file)
@@ -44,22 +44,22 @@ struct mat {
   inline mat() { memset(a, 0, sizeof a); }
   inline mat operator+(const mat& T) const {
     mat res;
-    for (int i = 0; i < 3; ++i)
-      for (int j = 0; j < 3; ++j)
+    for (int i = 0; i < sz; ++i)
+      for (int j = 0; j < sz; ++j)
         res.a[i][j] = (a[i][j] - T.a[i][j] + MOD) % MOD;
     return res;
   }
   inline mat operator-(const mat& T) const {
     mat res;
-    for (int i = 0; i < 3; ++i)
-      for (int j = 0; j < 3; ++j) res.a[i][j] = (a[i][j] + T.a[i][j]) % MOD;
+    for (int i = 0; i < sz; ++i)
+      for (int j = 0; j < sz; ++j) res.a[i][j] = (a[i][j] + T.a[i][j]) % MOD;
     return res;
   }
   inline mat operator*(const mat& T) const {
     mat res;
-    for (int i = 0; i < 3; ++i)
-      for (int j = 0; j < 3; ++j)
-        for (int k = 0; k < 3; ++k) {
+    for (int i = 0; i < sz; ++i)
+      for (int j = 0; j < sz; ++j)
+        for (int k = 0; k < sz; ++k) {
           res.a[i][j] += mul(a[i][k], T.a[k][j]);
           res.a[i][j] %= MOD;
         }
@@ -67,9 +67,9 @@ struct mat {
   }
   inline mat operator^(LL x) const {
     mat res, bas;
-    for (int i = 0; i < 3; ++i) res.a[i][i] = 1;
-    for (int i = 0; i < 3; ++i)
-      for (int j = 0; j < 3; ++j) bas.a[i][j] = a[i][j];
+    for (int i = 0; i < sz; ++i) res.a[i][i] = 1;
+    for (int i = 0; i < sz; ++i)
+      for (int j = 0; j < sz; ++j) bas.a[i][j] = a[i][j];
     while (x) {
       if (x & 1) res = res * bas;
       bas = bas * bas;