题解:洛谷 P5723 【深基4.例13】质数口袋

【题目来源】

洛谷:P5723 【深基4.例13】质数口袋 - 洛谷

【题目描述】

小 A 有一个质数口袋,里面可以装各个质数。他从 \(2\) 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。

口袋的负载量就是口袋里的所有数字之和。

但是口袋的承重量有限,装的质数的和不能超过 \(L\)。给出 \(L\),请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

【输入】

一行一个正整数 \(L\)

【输出】

将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。

【输入样例】

100

【输出样例】

2
3
5
7
11
13
17
19
23
9

【算法标签】

《洛谷 P5723 质数口袋》 #素数判断,质数,筛法#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int l;               // 定义变量:质数口袋的最大容量
    int sum = 0;         // 定义变量:质数口袋中质数的个数
    int tot = 0;         // 定义变量:质数口袋中质数的总和
  
    cin >> l;            // 输入质数口袋的容量
  
    // 遍历从2开始的整数,寻找质数
    for (int i = 2; tot + i <= l; i++) 
    {
        // 判断当前数i是否为质数
        int mark = 0;    // 标记是否为质数(0表示是质数)
        for (int j = 2; j < i; j++) 
        {
            if (i % j == 0) 
            {
                mark = 1; // 发现能整除的数,不是质数
                break;
            }
        }
      
        // 如果是质数
        if (mark == 0) 
        {
            // 检查是否能放入质数口袋
            if (i + tot <= l) 
            {
                cout << i << endl;  // 输出当前质数
                tot += i;           // 更新质数总和
                sum++;               // 更新质数个数
            } 
            else 
            {
                break;              // 超过容量,终止循环
            }
        }
    }
  
    // 输出质数口袋中质数的总个数
    cout << sum;
  
    return 0;            // 程序正常结束
}

【运行结果】

100
2
3
5
7
11
13
17
19
23
9
posted @ 2026-02-16 15:18  团爸讲算法  阅读(1)  评论(0)    收藏  举报