P5723质数口袋
题目
题目来源:洛谷OJ
题目链接:https://www.luogu.com.cn/problem/P5723
题目描述
小A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L(1≤L≤100000) 的质数。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
100
输出 #1复制
2
3
5
7
11
13
17
19
23
9
思路
1.首先要清楚什么是质数,明白质数的定义才能进行下一步的运算。
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
2.在质数判断的基础上再在外面加上一个判断,当质数的总和超过题目中的输入的L后,跳出循环。
3.最后输出每次判断出来的质数以及质数的总和即可。
源代码(Java)
package 入门3循环结构;
import java.util.Scanner;
/**
*@Title P5723质数口袋.java
*@description TODO
*@time 2020年7月4日
*@author Baisu
*@version 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入L
int l = sc.nextInt();
//特判排除较小的值
if(l==1) {
System.out.println(0);
}
//同上
else if(l<5) {
System.out.println(2);
System.out.println(1);
}
else {
int i = 5;
int sum = 5; //质数总和
int cot = 2; //质数个数
System.out.println("2");
System.out.println("3");
boolean flag = true; //用于跳出whike循环
while(flag) {
for(int j=2; j<i; j++) { //质数判断
if(i%j==0) {
break;
}
if(j==i-1 && sum+j<=l) { //求和判断、输出质数以及质数个数加一
System.out.println(i);
sum+=j;
cot++;
}
if(sum+j>l) { //判断跳出循环
flag = false;
}
}
i++;
}
System.out.println(cot); //输出总数
}
}
}