hzy20030514 2023-08-11 08:41 采纳率: 75%
浏览 4
已结题

正在准备计算机二级c语言的学生向大家提问

正在准备计算机二级c语言的学生向大家提

double fun(int n)  
{int i,a;double sum=0;
for(i=3;i<=n;i=i+2)
for(a=2;a<(int)sqrt(i);a++)
{if(i%a==0)
 break;
}
sum+=i;
return sum;
}

我写的这个代码为什么不能求出从3到n的素数的和?

  • 写回答

3条回答 默认 最新

  • a5156520 2023-08-11 08:59
    关注

    因为计算素数和的表达式放在了两个for循环外面,所以sum的值为for循环结束后i的值;

    然后for循环内,可以使用一个标志来记录区间的数是否可以整除i,当第二个for循环结束后,再根据这个标志是否为1(即是否是素数),来决定是否累加到和sum中,然后两个for循环结束,即可计算出3到n之间素数和。

    修改如下:

    
    #include <stdio.h>
    #include <math.h>
    double fun(int n) {
        int i,a;
        double sum=0;
        int prime;
        for(i=3; i<=n; i=i+2){
            prime=1; // 素数标志,默认1表示当前的数为素数 
            for(a=2; a<=(int)sqrt(i); a++) {
                if(i%a==0){  // 如果区间任意一个数可以整除 i,则i不是素数,素数标志置0 
                    prime=0;
                    break;
                }
                    
            }
                
            if(prime==1){  // 如果当前数是素数,则累加到和sum中 
                sum+=i;
            }
        }
        
        return sum;
    }
    
    int main(void) {
    
        int n;
        scanf("%d",&n);
    
        printf("3到%d之间的素数和为:%.0f\n",n,fun(n));
    
        return 0;
    
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 修改了问题 8月11日
  • 创建了问题 8月11日

悬赏问题

  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码