素数的总和给出了错误的答案

时间:2015-03-05 12:05:51

标签: c

我刚开始用C语言编程,而且我正在练习。我现在在https://projecteuler.net/problem=10,我写了那段代码:

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

int main()
{
    long int i=0,below=0,a=0;
    long int sum=0;
    printf("belowe number: ");
    scanf("%d",&below);
    int board[below];
    for(i=1;i<below;++i){
        board[i]=0;
    }
    for(i=2;i<below;i++){
        if(board[i]==0){
            sum+=i;
            for(a=2*i;a<=below;a+=i){
                board[a]=1;
            }
        }
    }
    printf("sum = %d",sum);
    return 0;
}

问题在于它返回错误的总和(1179908154)而不是(142913828922)。你能告诉我错误在哪里吗?我使用THIS方法计算素数。

2 个答案:

答案 0 :(得分:2)

scanf("%d",&below);

这不是您阅读long intbelow对象的类型)的方式,而是使用ld转换说明符。您的printf电话也是如此。

答案 1 :(得分:0)

有多个错误:

  1. 您从未初始化board[0]。此数组元素将包含垃圾值。

  2. 您正在此处访问board数组:

    for(a=2*i;a<=below;a+=i) { board[a]=1; //Here Index 'a' can be equal to below }

  3. 正如@ouah

  4. 所指出的那样