Loading docs/math/euclidean-like.md +52 −59 Original line number Diff line number Diff line Loading @@ -120,7 +120,6 @@ $$ \end{split} $$ ### 推导 h 同样的,首先取模: Loading Loading @@ -186,16 +185,11 @@ $$ using namespace std; const int P = 998244353; int i2 = 499122177, i6 = 166374059; struct data { data() { f = g = h = 0; } struct data { data() { f = g = h = 0; } int f, g, h; }; // 三个函数打包 data calc(int n, int a, int b, int c) { data calc(int n, int a, int b, int c) { int ac = a / c, bc = b / c, m = (a * n + b) / c, n1 = n + 1, n21 = n * 2 + 1; data d; if (a == 0) // 迭代到最底层 Loading @@ -209,7 +203,8 @@ data calc(int n, int a, int b, int c) { d.f = n * n1 % P * i2 % P * ac % P + bc * n1 % P; d.g = ac * n % P * n1 % P * n21 % P * i6 % P + bc * n % P * n1 % P * i2 % P; d.h = ac * ac % P * n % P * n1 % P * n21 % P * i6 % P + bc * bc % P * n1 % P + ac * bc % P * n % P * n1 % P; d.h = ac * ac % P * n % P * n1 % P * n21 % P * i6 % P + bc * bc % P * n1 % P + ac * bc % P * n % P * n1 % P; d.f %= P, d.g %= P, d.h %= P; data e = calc(n, a % c, b % c, c); // 迭代 Loading @@ -227,11 +222,9 @@ data calc(int n, int a, int b, int c) return d; } int T, n, a, b, c; signed main() { signed main() { scanf("%lld", &T); while(T--) { while (T--) { scanf("%lld%lld%lld%lld", &n, &a, &b, &c); data ans = calc(n, a, b, c); printf("%lld %lld %lld\n", ans.f, ans.h, ans.g); Loading docs/ds/block-array.md +1 −1 File changed.Contains only whitespace changes. Show changes docs/misc/parallel-binsearch.md +3 −3 File changed.Contains only whitespace changes. Show changes Loading
docs/math/euclidean-like.md +52 −59 Original line number Diff line number Diff line Loading @@ -120,7 +120,6 @@ $$ \end{split} $$ ### 推导 h 同样的,首先取模: Loading Loading @@ -186,16 +185,11 @@ $$ using namespace std; const int P = 998244353; int i2 = 499122177, i6 = 166374059; struct data { data() { f = g = h = 0; } struct data { data() { f = g = h = 0; } int f, g, h; }; // 三个函数打包 data calc(int n, int a, int b, int c) { data calc(int n, int a, int b, int c) { int ac = a / c, bc = b / c, m = (a * n + b) / c, n1 = n + 1, n21 = n * 2 + 1; data d; if (a == 0) // 迭代到最底层 Loading @@ -209,7 +203,8 @@ data calc(int n, int a, int b, int c) { d.f = n * n1 % P * i2 % P * ac % P + bc * n1 % P; d.g = ac * n % P * n1 % P * n21 % P * i6 % P + bc * n % P * n1 % P * i2 % P; d.h = ac * ac % P * n % P * n1 % P * n21 % P * i6 % P + bc * bc % P * n1 % P + ac * bc % P * n % P * n1 % P; d.h = ac * ac % P * n % P * n1 % P * n21 % P * i6 % P + bc * bc % P * n1 % P + ac * bc % P * n % P * n1 % P; d.f %= P, d.g %= P, d.h %= P; data e = calc(n, a % c, b % c, c); // 迭代 Loading @@ -227,11 +222,9 @@ data calc(int n, int a, int b, int c) return d; } int T, n, a, b, c; signed main() { signed main() { scanf("%lld", &T); while(T--) { while (T--) { scanf("%lld%lld%lld%lld", &n, &a, &b, &c); data ans = calc(n, a, b, c); printf("%lld %lld %lld\n", ans.f, ans.h, ans.g); Loading