把上取整不等式化成 A * (I - 1) + 1。
OJ: luogu
题目 ID: P7772
难度:入门
标签:数学
日期: 2026-06-18 20:21
题意
给出 A 和 I,求最小的正整数 N,使得 ceil(N / A) >= I。
思路
先看一个可以直接验证想法的朴素解:
可以从 N = 1 开始往上枚举,找到第一个满足 ceil(N / A) >= I 的数。
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long A, I;
cin >> A >> I;
long long N = 1;
while ((N + A - 1) / A < I) {
N++;
}
cout << N << '\n';
return 0;
}不过这题其实可以直接化公式。 因为
text
ceil(N / A) >= I等价于
text
N > A * (I - 1)所以最小的正整数解就是 A * (I - 1) + 1。
代码
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long A, I;
cin >> A >> I;
cout << A * (I - 1) + 1 << '\n';
return 0;
}复杂度
main.cpp 是直接公式,时间复杂度
总结
把上取整条件改写成严格不等式后,答案就变成了一个非常直接的整数公式。