终止数:分解质因数后只存在2和5的数字
数论
由以上定义,我们可以先将10^6以内所有符合条件的数字找出来,再从题目要求的范围[L,R]中统计出具体的个数。
#include <bits/stdc++.h>
using namespace std;
int main() {
int l, r;
cin >> l >> r;
const int MAX = 1e6;
set<int> nums; // 排序并去重
// 生成所有不超过 MAX 的形如 2^a * 5^b 的数
for (long long a = 1; a <= MAX; a *= 2) {
for (long long b = a; b <= MAX; b *= 5) {
nums.insert(b);
}
}
// 统计个数
int ans = 0;
for (int t: nums) {
if (t > r) break;
ans += t >= l;
}
cout << ans << endl;
return 0;
}
如果本题为多组数据,则需要加入二分查找等优化方案提高求解效率。