P5723 【深基4.例13】质数口袋

题目描述

小 A 有一个质数口袋,里面可以装各个质数。他从 2 2 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。

口袋的负载量就是口袋里的所有数字之和。

但是口袋的承重量有限,装的质数的和不能超过 L L L。给出 L L L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

输入格式

一行一个正整数 L L L

输出格式

将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。

1.题目分析

该题主要考查质数的判断方法:对于n,定义一个标记变量为1,
从2开始循环到2的平方根,判断n对i是否为0,
如果能被整除,则标记为0,不是质数,
循环结束返回flag,如果为1的话,就是一个质数。

2.题目思路

写一个判断质数的函数isPrime(),从2开始到L遍历,先判断是否为质数,
如果是质数则累加为sum,再判断是否超过口袋容量L,
超过则直接break,反之则打印换行,最后计数器加一(用于记录口袋容量)。

3.代码演示

#include 
#include 
//判断是否为质数
int isPrime(int n) {
    int flag = 1;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) {
            flag = 0;
        }
    }
    return flag;
}

int main() {
    int l;
    int sum = 0;
    int count = 0;
    scanf("%d", &l);

    for (int i = 2; i < l; ++i) {
        //先判断质数
        if (isPrime(i) == 1) {
            //累加
            sum += i;
            //判断口袋容量
            if (sum > l){
                break;
            }
            //打印
            printf("%d\n", i);
            //记录容量
            count++;
        }
    }
    //打印个数
    printf("%d\n",count);

    return 0;
}

你可能感兴趣的:(刷题go,go,go,算法)