求素数和与素数的个数

img

img


求个解答为什么这样写代码不对?我这样做出来以后shell显示count和sum都是0

if(isprime)
...
这些代码要写在for循环的后面,而不是里面

12行的条件应该是错了

【以下回答由 GPT 生成】

你的代码中的问题在于for循环条件的判断。在计算是否为素数时,你的循环条件是从2开始依次除以i/2,然而这样的条件有些多余。实际上,只需要循环到i的平方根即可判断是否为素数。

下面是修复后的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int n, i, count = 0, sum = 0;
    printf("请输入一个正整数n: ");
    scanf("%d", &n);

    for (i = 2; i <= n; i++) {
        int isPrime = 1;

        for (int j = 2; j <= sqrt(i); j++) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }

        if (isPrime) {
            count++;
            sum += i;
        }
    }

    printf("素数的个数为:%d\n", count);
    printf("素数的和为:%d\n", sum);

    return 0;
}

修复后的代码使用sqrt函数来计算平方根,将循环条件改为j <= sqrt(i),这样就避免了多余的除法运算。这样,你的代码应该就能正确计算出素数的个数和和了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^