素数低于500的总和

时间:2014-11-27 03:05:46

标签: c

我制作了以下代码:

  1 #include<stdio.h>
  2 #include<stdbool.h>
  3
  4 bool c[500];
  5 void main()
  6 {
  7  int i,n=1,j;
  8  for (i=2; i<500; i++)
  9  {
 10         if (!c[i])
 11         {
 12                 printf("%d is the prime number %d\n", i,n);
 13                 n++;
 14                 j=2;
 15                 while (j*i<500)
 16                 {
 17                         c[j*i]=1;
 18                         j++;
 19                 }
 20         }
 21  }
 22 }

显示500以下的素数;现在,我怎样才能让程序显示所有这些数字的总和(所有素数低于500)只需几行?感谢您的帮助,我是C的新手

3 个答案:

答案 0 :(得分:2)

  1. 首先,将变量sum设置为零。
  2. 然后,每当您输出素数时,也将其添加到sum
  3. 然后,当您完成后,输出sum

  4. 因此,假设您的代码不起作用,您可以更改,对于上面的第1点:

    int i,n=1,j;
    

    成:

    int i,n=1,j,sum=0;
    

    第2点涉及改变:

    printf("%d is the prime number %d\n", i,n);
    

    成:

    printf("%d is the prime number %d\n", i,n);
    sum += i;
    

    最后,第3点可以通过放置:

    来制定
    printf("Sum of all those primes is %d\n", sum);
    

    在最后的大括号之前。


    对代码的更改(包括注释和更合适的变量名称,以使其可读)将类似于:

    #include <stdio.h>
    #include <stdbool.h>
    
    // Find/sum all primes less than this number.
    
    #define LIMIT 500
    
    // Flag indicating a number is non-prime, initialised to zeros.
    
    bool isComposite[LIMIT];
    
    void main (void) {
        int num, mult;
        int count = 1, sum = 0;
    
        // Check every number for primeness.
    
        for (num = 2; num < LIMIT; num++) {
            // Ignore if composite.
    
            if (!isComposite[num]) {
                // Print prime, add to sum.
    
                printf ("%d is the prime number %d\n", num, count++);
                sum += num;
    
                // Mark all multiples of it as composite.
    
                for (mult = num * 2; mult < LIMIT; mult += num) {
                    isComposite[mult] = 1;
                }
            }
        }
    
        // Now just output the sum.
    
        printf ("The sum of those primes is %d\n", sum);
    }
    

    如果是课堂作业,请不要复制,你可能会被发现。我将它包含在内只是为了向您展示如果您遵循一些简单的规则可以获得多少可读代码,其中一些规则如下:

    • 大量使用评论,一般用来描述你在做什么,而不是如何。
    • 使用体面的变量名称。
    • 尽量避免像500这样的“魔术”常量。
    • 尽量减少垂直空间,只要它不影响可读性(通常最好在屏幕上看到尽可能多的代码)。

答案 1 :(得分:2)

添加额外变量sum

喜欢这个

#include<stdio.h>
#include<stdbool.h>

   bool c[500];
   int main()
   {
    int i,n=1,j,sum=0;
    for (i=2; i<500; i++)
    {
          if (!c[i])
          {
                printf("%d is the prime number %d\n", i,n);
                sum+=i;
                  n++;
                 j=2;
                  while (j*i<500)
                 {
                          c[j*i]=1;
                         j++;
                  }
          }
   }
   printf("Sum is %d",sum);
 }

答案 2 :(得分:1)

  1 #include<stdio.h>
  2 #include<stdbool.h>
  3
  4 bool c[500];
  5 void main()
  6 {
  7  int i,n=1,j; int sum = 0;
  8  for (i=2; i<500; i++)
  9  {
 10         if (!c[i])
 11         {
 12                 printf("%d is the prime number %d\n", i,n);
 13                 sum += i; n++;
 14                 j=2;
 15                 while (j*i<500)
 16                 {
 17                         c[j*i]=1;
 18                         j++;
 19                 }
 20         }
 21  } printf("sum: %d", sum);
 22 }