【问题标题】:How to find the sum of Prime Numbers in C within a given range?如何在给定范围内找到C中素数的总和?
【发布时间】:2013-02-07 08:21:51
【问题描述】:

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

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

【问题讨论】:

  • 只是一个快速的代码质量注释 - 不要使用 goto。
  • 使用break代替并删除end:,它应该像以前一样工作
  • 我看了一眼你的代码,发现标签“end”在那里,据我记得使用标签被认为是一种不好的风格,因为它使代码修订非常复杂
  • 你只需删除 goto 标签,它应该可以工作。
  • 如果你需要得到质数之和,为什么要添加最后一次除法的余数呢? (sum = sum +test) 而不是 (sum=sum+n)

标签: c logic primes


【解决方案1】:

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

scanf("%i",&range);

第二条这条指令不正确

sum = sum + test;

应该是

sum = sum + n;

还有

while (range > 0)

应该改为

while (range > 1)

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

就是这样

【讨论】:

    【解决方案2】:

    好的,我的 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;
    }
    

    【讨论】:

      【解决方案3】:

      我已经有一段时间没有做过 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() 会使您的程序难以调试。

      【讨论】:

      • 这几天python太多了? :-)
      • @Aniket:永远没有太多 Python。
      • @Blender,永不言败 :-)
      【解决方案4】:

      复制 - 从here粘贴。

      #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
      

      【讨论】:

        【解决方案5】:

        在这里尝试最简单的方法。检查C program to find sum of all prime between 1 and n numbers

        代码

        #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-07-15
          • 2022-12-04
          • 2020-10-03
          • 2015-08-25
          • 1970-01-01
          • 2021-02-11
          • 1970-01-01
          • 1970-01-01
          • 2020-03-12
          相关资源
          最近更新 更多