1

我对编程很陌生,我被要求使用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;
}

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

4

5 回答 5

4

首先,在scanf使用&range和不range

scanf("%i",&range);

其次这个指令不正确

sum = sum + test;

它应该是

sum = sum + n;

还有

while (range > 0)

应该改为

while (range > 1)

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

就这样

于 2013-02-07T08:26:07.460 回答
0

好的,我的 C 语言真的很糟糕,但试试下面的代码。可能不会编译,但如果是家庭作业或其他什么,你最好自己弄清楚:

更新:根据要求将其设为 while 循环。

#include <stdio.h>
int main()
{
    int range, test, counter, innerCounter, sum = 1;
    int countPrimes = 1;
    int [50] primesArray;
    primesArray[0] = 1;

    printf("Enter the range.");
    scanf("%i",range);

    counter = 2;
    while (counter <= range) {
        for (innerCounter = 1; innerCounter < countPrimes; innerCounter++) {
            if (counter % primesArray[innerCounter] == 0)
                continue;
            primesArray[countPrimes + 1] = counter;
            countPrimes ++;
            sum += counter;
        }

        counter ++
    }

    printf("The sum is %i",sum);
    return 0;
}
于 2013-02-07T08:33:30.480 回答
0

我有一段时间没有做过 C,但我会做一些函数来简化你的逻辑:

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

int is_prime(n) {
    int i;

    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return 0;
        }
    }

    return 1;
}

int main() {
    int range, i, sum, num_primes = 0;

    printf("Enter the range: ");
    scanf("%d", &range);

    for (i = 2; num_primes < range; i++) {
        if (is_prime(i)) {
            sum += i;
            num_primes++;
        }
    }

    printf("The sum is %d", sum);

    return 0;
}

使用goto所有代码并将其塞入其中main()会使您的程序难以调试。

于 2013-02-07T08:36:39.800 回答
0

在这里尝试最简单的方法。检查C 程序以查找 1 和 n 数字之间的所有素数的总和

代码

#include <stdio.h>

int main()
{
    int i, j, n, isPrime, sum=0;

    /*
     * Reads a number from user
     */
    printf("Find sum of all prime between 1 to : ");
    scanf("%d", &n);

    /*
     * Finds all prime numbers between 1 to n
     */
    for(i=2; i<=n; i++)
    {

        /*
         * Checks if the current number i is Prime or not
         */
        isPrime = 1;
        for(j=2; j<=i/2 ;j++)
        {
            if(i%j==0)
            {
                isPrime = 0;
                break;
            }
        }

        /*
         * If i is Prime then add to sum
         */
        if(isPrime==1)
        {
            sum += i;
        }
    }

    printf("Sum of all prime numbers between 1 to %d = %d", n, sum);

    return 0;
}
于 2016-01-16T06:20:53.453 回答
0

从这里复制粘贴。

#include <stdio.h>

  int main() {
        int i, n, count = 0, value = 2, flag = 1, total = 0;

        /* get the input value n from the user */
        printf("Enter the value for n:");
        scanf("%d", &n);

        /* calculate the sum of first n prime nos */
        while (count < n) {
                for (i = 2; i <= value - 1; i++) {
                        if (value % i == 0) {
                                flag = 0;
                                break;
                        }
                }
                if (flag) {
                        total = total + value;
                        count++;
                }
                value++;
                flag = 1;
        }

        /* print the sum of first n prime numbers */
        printf("Sum of first %d prime numbers is %d\n", n, total);
        return 0;
  }

输出:

Enter the value for n:5
Sum of first 5 prime numbers is 28
于 2016-01-16T07:31:37.193 回答