题意
求两个分数之间的、最简的且分母为K的分数。
思路
先进行通分,判断之间的所有分数化为最简分数后分母是不是K。
坑点:
- 注意不能直接暴力地+1+1判过去,这样会T。
- 给定的两个分数可能后面小,前面大。
- 答案不包含两端点。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
//ios::sync_with_stdio(false);
//cin.tie(nullptr);
//cout.tie(nullptr);
int64_t n1, n2, m1, m2, k;
scanf("%lld/%lld %lld/%lld %lld", &n1, &m1, &n2, &m2, &k);
n1 *= k * m2;
n2 *= k * m1;
if (n1 > n2) swap(n1, n2);
vector<int64_t> ans;
int64_t jump = m1 * m2;
for (int64_t i = n1 + (jump - n1 % jump); i < n2; i += jump) {
if (__gcd(i, k * jump) == jump) {
ans.push_back(i / jump);
}
}
for (int i = 0; i < ans.size(); ++i)
printf("%lld/%lld%c", ans[i], k, (i == ans.size() - 1 ? '\n' : ' '));
return 0;
}
HINT
不定时更新更多题解,Basic Level 全部AC代码,详见 link ! ! !