1 条题解
-
0
📝 题目大意
给定一个整数 (),求满足 且 是 的倍数的唯一整数 。本质上就是求 对 取模的非负余数。
💡 解题思路
-
题目分析:条件 是 的倍数,等价于 。因此 就是 除以 的余数,且要求 。数据范围 ,在
long long范围内,直接取模即可。 -
算法推导:
- 设
mod = 998244353。 - 先计算
n % mod,得到 除以mod的余数。 - 在 C++ 中,当 为负数时,
n % mod的结果也是负数(或零)。例如 。 - 因此,如果
n % mod < 0,需要加上mod将其调整到 范围内。 - 最终输出调整后的
n即可。
- 设
-
边界与细节:
- 当 恰好是
mod的倍数时(包括 ),n % mod == 0,无需调整,直接输出 。 - 当 为负数且绝对值很大时(如样例 2 的 ),取模后为负,加上
mod即可得到正确的非负余数。 - 注意
mod = 998244353在int范围内,但 可达 ,需要使用long long。
- 当 恰好是
⏱️ 复杂度分析
- 时间复杂度:,仅一次取模和一次条件判断。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define int long long #define double long double const int mod = 998244353; // 模数 signed main(){ int n; cin >> n; n %= mod; // 先取模,C++ 中负数取模结果可能为负 if(n < 0) // 如果余数为负,加上 mod 调整到非负范围 n += mod; cout << n << '\n'; // 输出 [0, mod-1] 范围内的答案 } -
- 1
信息
- ID
- 626
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者