如何在给定范围内求C中的素数之和?

如何在给定范围内求C中的素数之和?,c,logic,primes,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

我对编程非常陌生,有人要求我使用
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;
}
#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;
}
#包括
int main()
{
int范围,测试;
整数和=2;
int n=3;
printf(“输入范围”);
扫描频率(“%i”,范围);
而(范围>0)
{
int i=2;

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

scanf("%i",&range);
第二,这个说明不正确

sum = sum + test;
应该是

sum = sum + n;
还有

while (range > 0)
应改为

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


这就是全部

首先,在
scanf
中使用
范围
而不是
范围

scanf("%i",&range);
第二,这个说明不正确

sum = sum + test;
应该是

sum = sum + n;
还有

while (range > 0)
应改为

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


就这些

好吧,我的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;
}
#包括
int main()
{
int范围,测试,计数器,内部计数器,总和=1;
int countPrimes=1;
int[50]primesArray;
primesArray[0]=1;
printf(“输入范围”);
扫描频率(“%i”,范围);
计数器=2;

虽然(counter好的,我的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;
}
#包括
int main()
{
int范围,测试,计数器,内部计数器,总和=1;
int countPrimes=1;
int[50]primesArray;
primesArray[0]=1;
printf(“输入范围”);
扫描频率(“%i”,范围);
计数器=2;

while(counter我已经有一段时间没有做过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;
}
#包括
#包括
int是素数(n){
int i;

对于(i=2;i我已经有一段时间没有使用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;
}
#包括
#包括
int是素数(n){
int i;

对于(i=2;i试试这里最简单的方法。检查

代码

#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;
}
#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;
}
#包括
int main()
{
int i,j,n,isPrime,和=0;
/*
*从用户读取一个数字
*/
printf(“求1到:”)之间所有素数的和);
scanf(“%d”和“&n”);
/*
*查找1到n之间的所有素数
*/

对于(i=2;i试试这里最简单的方法。检查

代码

#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;
}
#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;
}
#包括
int main()
{
int i,j,n,isPrime,和=0;
/*
*从用户读取一个数字
*/
printf(“求1到:”)之间所有素数的和);
scanf(“%d”和“&n”);
/*
*查找1到n之间的所有素数
*/
对于(i=2;i复制粘贴自

复制-粘贴自


只是一个快速的代码质量注释-不要使用goto。使用
break
代替并删除
end:
,它应该像以前一样工作。我一眼就看了代码,找到了标签“end”在那里,据我记忆所及,使用标签被认为是一种不好的风格,因为它使代码修改变得非常复杂。只要删除goto标签,它就会工作。如果你需要得到素数的和,为什么你要把最后一次尝试除法的剩余部分加起来呢?(sum=sum+test)而不是(sum=sum+n)只是一个快速的代码质量注释-不要使用goto。使用
break
代替并删除
end:
,它应该像以前一样工作。我一眼就看了代码,找到了标签“end”在那里,据我记忆所及,使用标签被认为是一种糟糕的风格,因为它使代码修订变得非常复杂。只需删除goto标签,它就应该可以工作。如果您需要获得素数的总和,为什么要添加上一次试除的剩余部分呢?(sum=sum+test)而不是(sum=sum+n)这些天太多的python?:-)@阿尼凯特:从来没有太多的蟒蛇。@Blender,从来没有说过永不:-)最近有太多的蟒蛇吗?:-)@Aniket:从来没有太多的蟒蛇。@Blender,从来没有说过永不:-)