C中的大数字

用户名

我编写了一个简单的程序,用于计算然后求和一个特定值(在这种情况下为1000000)以下的质数。我对其进行了低范围的测试,看起来还不错,因此我对该算法相当有信心。但是,当我运行大量代码时,会产生错误的数字(有时为负数)。

我猜对了我没有使用正确的数据类型来存储大量数字是否正确?如果可以的话,有人可以指出正确的方向吗?我尝试了一些没有成功的事情。谢谢

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

#define NUM 1000000

int main()
{

long int listNum[NUM];
long int n,x;
long int sum =0;

//Initialize the array
for (n = 1; n <=NUM; n++) {
    listNum[n] = n;
    }

//Iterate Sieve of Eratosthenes
for (x = 2; x <= sqrt(NUM); x++) { //only currently works for square numbers NUM
    for (n = 2; n <=NUM; n++) {
        if (listNum[n] % x == 0 && n!=x) {
        listNum[n] = 0;
        }
    }
}
for (n = 2; n <= NUM; n++){  
sum += listNum[n];
}
printf("Sum is %d \n", sum);
}
托马斯·帕德隆·麦卡锡

您的代码中有一个简单的错误:最终printf中的“%d”应为“%ld”。

您正在使用哪个编译器?海湾合作委员会给我这个警告:

sieve.c:30:5:警告:格式'%d'期望类型为'int'的参数,但是参数2的类型为'long int'[-Wformat =]

然后,这还取决于平台上长整型的大小。我的系统上的long int恰好是64位,但是在其他系统上,它们可能只有32位,然后您的程序可能会溢出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章