题目描述
小 A 有一个质数口袋,里面可以装各个质数。他从 2开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。
口袋的负载量就是口袋里的所有数字之和。
但是口袋的承重量有限,装的质数的和不能超过 L。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。
输入格式
一行一个正整数 L。
输出格式
将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
输入输出样例
输入 #1复制
100
输出 #1复制
2 3 5 7 11 13 17 19 23 9
输入 #2复制
5
输出 #2复制
2 3 2
输入 #3复制
11
输出 #3复制
2 3 5 3
说明/提示
数据保证,1≤L≤105。
代码如下(新手上路,请多关照):
#include<stdio.h>
#include<math.h>
// 函数声明:判断一个数是否为质数
int is_prime(int n);
int main()
{
int n;
int sum = 0, count = 0;
scanf("%d",&n);
// 遍历从 2 开始的数,直到 sum+i 不超过输入的 n
for(int i = 2; sum + i <= n; i++){
// 判断当前数是否为质数
if(is_prime(i)){
printf("%d\n",i);
// 计数器加一,表示找到一个质数
count++;
// 将当前质数累加到 sum
sum += i;
}
}
// 输出找到的质数个数
printf("%d",count);
return 0;
}
// 判断一个数是否为质数的函数实现
int is_prime(int n){
// 遍历从 2 到 n 的平方根的数
for(int j = 2; j <= sqrt(n); j++){
// 如果 n 能被 j 整除,说明不是质数
if(n % j == 0)
return 0;
}
// 如果循环结束都没有找到能整除 n 的数,说明是质数
return 1;
}
ps:🤔🤔🤔
这段 C 语言代码的主要思路如下:
一、整体流程
1. 从用户输入获取一个整数 n 。
2. 通过循环尝试找到小于等于 n 的连续质数之和,并统计质数的个数。
3. 最后输出找到的质数个数。
二、寻找质数的过程
1. 在 main 函数的循环中,从 i = 2 开始逐步增加 i 的值。
2. 对于每个 i ,调用 is_prime 函数判断其是否为质数。
- 在 is_prime 函数中,通过遍历从 2 到 i 的平方根的数 j ,检查 i 是否能被 j 整除。如果能被整除,则说明 i 不是质数,返回 0 ;如果遍历完都没有找到能整除 i 的数,则说明 i 是质数,返回 1 。
3. 如果 i 是质数,将其输出,并累加到 sum 变量中,同时质数个数计数器 count 加一。循环继续,直到 sum + i 超过输入的 n 。
综上所述,这段代码通过不断判断整数是否为质数,并累加质数直到和不超过输入的整数 n ,最终输出找到的质数个数。