题解:洛谷 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
浙公网安备 33010602011771号