题目描述
小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L (1≤L≤100000)的质数。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
输入格式
一行一个正整数 L。
输出格式
将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
分析:
使用for循环先判断是否是质数,如果是就做加法,并且先判断加完是否会超过L,如果超过就return,如果不超过就继续直到超过L。一定要先判断和是否超过L,可能是加下一个就超过L,这样这个质数就不能输出。如果先输出在判断,就会导致多输出一个。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long l, sum, z, n;
cin >> l;
sum = 0;
n = 0;
if (l < 2) {
cout << "0";
}
else {
for (int i = 2; i <= l; i++) {
z = 0;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
z = -1;
}
}
if (z == 0) {
sum += i;
if (sum > l) {
cout << n;
return 0;
}
cout << i << endl;
n++;
}
}
}
}