c - 如何在给定范围内找到C中素数的总和?

标签 c logic primes

我是编程新手,有人要求我使用 while 循环求出给定范围内素数的总和。如果输入是 5,答案应该是 28 (2+3+5+7+11)。我尝试编写代码,但似乎逻辑不对。

代码

#include <stdio.h>
int main()
{
    int range,test;
    int sum = 2;
    int n = 3;
    printf("Enter the range.");
    scanf("%i",range);
    while (range > 0)
    {
        int i =2;
        while(i<n)
        {
            test = n%i;
            if (test==0)
            {
             goto end;
            }
                  i++;
        }
        if (test != 0)
        {
            sum = sum + test;
            range--;
        }
        end:
                  n++;
    }
    printf("The sum is %i",sum);
    return 0;
}

如果你能指出我的错误并告诉我如何从那里开始,那就太好了。

最佳答案

首先,在 scanf 中使用 &range 而不是 range

scanf("%i",&range);

第二条指令不正确

sum = sum + test;

应该是

sum = sum + n;

还有

while (range > 0)

应该改为

while (range > 1)

因为在您的算法中您已经将范围的第一个元素放在总和 sum = 2 中,所以 while 应该循环 range - 1 次而不是 范围

就这样

关于c - 如何在给定范围内找到C中素数的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746603/

相关文章:

c++ - 使用 Boost 条件变量的死锁;指针不在线程之间更新?

c - 为什么这会返回段错误?

python - 在 Python 中不使用条件语句四舍五入为整数 - 逻辑

c - GTK Glade C - 将变量传递给函数,包括 TreeView

c - 如何确定是否启用了 CONFIG_FANOTIFY_ACCESS_PERMISSIONS?

java - 了解我的素数计算和素数 JFrame 发生了什么

python - 使用 for 和 while 循环编写质数函数的最 Pythonic 方法是什么?

java - SPOJ 上的 PrimeNumber 生成器运行时错误

algorithm - 具有特定约束的长度为 N 的密码数

c# - 从 M 集合中取出 n 个唯一对象