| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 83998 | sh25_shenpy | 幸运数_1 | C++ | 通过 | 7 MS | 408 KB | 1347 | 2026-02-05 15:07:58 |
#include <iostream> #include <vector> using namespace std; int main() { int m, n; cin >> m >> n; // 步骤1:生成初始序列(仅保留奇数,因为第一步筛除偶数) // 初始序列上限设为n的2倍,确保覆盖所有可能的幸运数(n<1e6) vector<int> nums; for (int i = 1; i <= 2 * n; i += 2) { nums.push_back(i); } // 步骤2:执行幸运数筛法 int k = 1; // 从第2个幸运数开始筛(k=1对应nums[1]=3,是第2个幸运数) while (k < nums.size()) { int luck = nums[k]; // 当前用于筛除的幸运数 if (luck > nums.size()) break; // 筛子超过序列长度,无需继续 // 筛除序号能被luck整除的元素(序号从1开始) vector<int> new_nums; for (int i = 0; i < nums.size(); ++i) { // 序号 = i+1,若序号不能被luck整除则保留 if ((i + 1) % luck != 0) { new_nums.push_back(nums[i]); } } nums = new_nums; k++; // 处理下一个幸运数 } // 步骤3:统计(m, n)区间内的幸运数个数 int count = 0; for (int num : nums) { if (num > m && num < n) { count++; } } cout << count << endl; return 0; }