模板
#include <iostream>
#include <cstdio>
using namespace std;
const int MOD = 998244353;
int inv2, inv6, n, a, b, c;
long long quickPower (long long x, long long y) {
long long res = 1;
while (y) {
if (y & 1) res = res * x % MOD;
x = x * x % MOD;
y >>= 1;
}
return res;
}
struct Euclid {
Euclid () {
f = g = h = 0;
}
long long f, g, h;
};
Euclid calc (long long n, long long a, long long b, long long c) {
long long ac = a / c, bc = b / c, m = (a * n + b) / c, n1 = n + 1, n21 = n * 2 + 1;
Euclid d;
if (!a) {
d.f = bc * n1 % MOD;
d.g = bc * n % MOD * n1 % MOD * inv2 % MOD;
d.h = bc * bc % MOD * n1 % MOD;
return d;
}
if (a >= c || b >= c) {
Euclid e = calc(n, a % c, b % c, c);
d.f = ((n * n1 % MOD * inv2 % MOD * ac % MOD + bc * n1 % MOD) % MOD + e.f) % MOD;
d.g = ((ac * n % MOD * n1 % MOD * n21 % MOD * inv6 % MOD + bc * n % MOD * n1 % MOD * inv2 % MOD) % MOD + e.g) % MOD;
d.h = ((ac * ac % MOD * n % MOD * n1 % MOD * n21 % MOD * inv6 % MOD + bc * bc % MOD * n1 % MOD + ac * bc % MOD * n % MOD * n1 % MOD) % MOD + e.h + 2 * bc % MOD * e.f % MOD + 2 * ac % MOD * e.g % MOD) % MOD;
return d;
}
Euclid e = calc(m - 1, c, c - b - 1, a);
d.f = ((n * m % MOD - e.f) % MOD + MOD) % MOD;
d.g = ((m * n % MOD * n1 % MOD - e.h - e.f) % MOD + MOD) % MOD * inv2 % MOD;
d.h = ((n * m % MOD * (m + 1) % MOD - 2 * e.g - 2 * e.f - d.f) % MOD + MOD) % MOD;
return d;
}
inline void init () {
scanf("%d%d%d%d", &n, &a, &b, &c);
Euclid ans = calc(n, a, b, c);
printf("%lld %lld %lld\n", ans.f, ans.h, ans.g);
}
int main () {
inv2 = quickPower(2, MOD - 2);
inv6 = quickPower(6, MOD - 2);
int t;
scanf("%d", &t);
while (t --) init();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探