7-33 统计素数并求和

本题要求统计给定整数MN区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数MN(1≤MN≤500)。

输出格式:

在一行中顺序输出MN区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

AC代码块记录:

#include <stdio.h>

int main()
{
    int arr_sushu[505] = {0};
    arr_sushu[2] = 2;
    for (int i = 3; i <= 500; i++)
    {
        int j;
        for (j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                break;
            }
        }
        if (j == i)
        {
            arr_sushu[i] = i;
        }
    }

    int a = 0, b = 0;
    int num = 0, sum = 0;
    while (scanf("%d %d", &a, &b) != EOF)
    {
        for (int i = a; i <= b; i++)
        {
            if (arr_sushu[i] != 0)
            {
                num++;
            }
            sum += arr_sushu[i];
        }
        printf("%d %d\n", num, sum);
    }

    return 0;
}

其中将0-500的所有素数判断并存入数组,数组下标与数字相对应,非素数时数组存入值为0。用数字2(素数)和4(非素数)举例:arr_sushu[2]==2;arr_sushu[4]==0。这样做方便题目中后续给出区间时的计算。

int arr_sushu[505] = {0};
arr_sushu[2] = 2;
for (int i = 3; i <= 500; i++)
{
    int j;
    for (j = 2; j < i; j++)
    {
        if (i % j == 0)
        {
            break;
        }
    }
    if (j == i)
    {
        arr_sushu[i] = i;
    }
}

此时再给出区间后,求区间内素数和时,就可以将区间内所有值相加,因为非素数下标中存入的是0,不影响最后结果。用区间[5,10]举例:直接用for循环将arr_sushu[5]到arr_sushu[10]全部相加,因为此时数组中arr_sushu[5]==5,arr_sushu[6]==0,arr_sushu[7]==7,arr_sushu[8]==0,arr_sushu[9]==0,arr_sushu[10]==0,得出的和就是[5,10]中所有素数的和。


C语言小白,刷题自存,如有帮助不胜荣幸。 若您有更优解感谢投稿。 🔼
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值