坤坤藤椒牛肉面 2023-11-19 19:56 采纳率: 83.3%
浏览 4
已结题

c语言求素数和,看看我的代码错哪

看看我写的c语言代码,是问题出在哪里,需要在哪个地方修改,各位各显神通,看看代码到底是哪里出了问题吧

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-19 23:00
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    
    int main() {
        int range, i, j, isPrime, sum = 0;
    
        printf("请输入一个整数范围:");
        scanf("%d", &range);
    
        for (i = 2; i <= range; i++) {
            isPrime = 1;
    
            for (j = 2; j <= i / 2; j++) {
                if (i % j == 0) {
                    isPrime = 0; // 错误:不应该在这里就判断是否为素数,否则会导致后续无法正确判断
                    break;
                }
            }
    
            if (isPrime) {
                sum += i;
            }
        }
    
        printf("范围内素数的和为:%d\n", sum);
    
        return 0;
    }
    

    上述代码的问题是在内层循环中,过早地判断了是否为素数,导致后续无法正确判断。应该将判断是否为素数的部分移到内层循环外,然后根据循环结束后的isPrime值来判断并累加素数。另外,我们可以对循环进行优化,只需判断2到i-1之间的数字是否能整除i即可,无需判断到i/2,这样可以提高效率。

    以下是修改后的代码:

    #include <stdio.h>
    
    int main() {
        int range, i, j, isPrime, sum = 0;
    
        printf("请输入一个整数范围:");
        scanf("%d", &range);
    
        for (i = 2; i <= range; i++) {
            isPrime = 1;
    
            for (j = 2; j < i; j++) {
                if (i % j == 0) {
                    isPrime = 0;
                    break;
                }
            }
    
            if (isPrime) {
                sum += i;
            }
        }
    
        printf("范围内素数的和为:%d\n", sum);
    
        return 0;
    }
    

    这样,代码就能够正确求出范围内所有素数的和了。希望对你有所帮助! ```



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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