C++实现计算指定区间内“两质整数”数量的程序
以下是为你补全的代码: ```cpp #include <bits/stdc++.h> using namespace std; bool isnp[1000005], vis[1000005]; int p[1000005], sum[1000005], m; // 埃拉托斯特尼筛法初始化质数数组 void init() { m = 0; for (int i = 2; i <= 1e6; i++) { if (!isnp[i]) { m++; // 将质数存到p数组中 p[m] = i; for (int j = i + i; j <= 1e6; j += i) { // 将i的倍数标记为非质数 isnp[j] = true; } } } } int main() { init(); // 预处理出1e6以内的两质整数 for(int i = 1; i <= m; i++) { for(int j = 1; j <= i; j++) { long long product = (long long)p[i] * p[j]; if(product > 1e6) break; vis[product] = true; // 标记为两质整数 } } // 计算前缀和 1~i 之间有多少个两质整数 for(int i = 1; i <= 1e6; i++) { sum[i] = sum[i - 1]; if(vis[i]) sum[i]++; } // 处理Q次询问 int Q, L, R; cin >> Q; while(Q--) { cin >> L >> R; // 利用前缀和计算区间内两质整数的数量 cout << sum[R] - sum[L - 1] << endl; } return 0; } ``` ### 代码解释: - **`init`函数**:使用埃拉托斯特尼筛法找出 $1$ 到 $10^6$ 之间的所有质数,并将它们存储在数组`p`中,同时标记非质数。 - **预处理两质整数**:通过双重循环遍历所有质数对,计算它们的乘积。如果乘积在 $1$ 到 $10^6$ 范围内,则将其标记为两质整数。 - **计算前缀和**:使用数组`sum`来记录 $1$ 到 $i$ 之间两质整数的数量。 - **处理询问**:对于每次询问 $[L, R]$,通过前缀和数组计算该区间内两质整数的数量,即`sum[R] - sum[L - 1]`。 ######[AI问答 | 666点数解答 | 2026-08-15 20:35:19]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)353
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)335
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)152
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)366
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)561
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)415
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)430
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)421
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)419
- C语言:按特定顺序读入再输出,含浮点数精确格式处理(字节豆包 | 105点数解答 | 2024-10-08 22:07:29)436
- C++ 混合类型数据格式化输入输出:按指定顺序输出并保留两位小数(字节豆包 | 187点数解答 | 2024-10-16 14:31:08)474
- C语言:实现混合类型数据格式化输入输出,代码超简单!(字节豆包 | 159点数解答 | 2024-10-16 14:32:18)465