[c语言]质数口袋

题目描述

小 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 ,最终输出找到的质数个数。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值