作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我用Sieve计算了200万以下的所有质数之和,但是程序在尝试多次后总是因为溢出而崩溃。它适用于 PRIME_LIMIT = 200000
那么我的代码有什么问题呢?我不认为这是算法问题。当我在声明 bool 数组时放置 static
关键字时,它打印出错误的总和...没有关键字,它会溢出...
这是我写的方法:
void problem10()
{
unsigned long long int iter = 2, sum = 0;
static bool prime[PRIME_LIMIT];
for (unsigned long long int i = 0; i < PRIME_LIMIT; i++)
{
prime[i] = true;
}
unsigned long long int limit = ceil(sqrt(PRIME_LIMIT));
for (unsigned long long int i = 2; i <= limit; i++)
{
if (prime[i])
{
for (unsigned long long int j = i*i; j < PRIME_LIMIT; j += i)
{
prime[j] = false;
}
}
}
for (unsigned long long int i = 2; i < PRIME_LIMIT; i++)
{
if (prime[i])
{
sum += i;
//printf("Primes are: %d\n", i);
}
}
printf("Sum of prime is: %llu\n", sum);
}
最佳答案
正如您在评论中所说,您没有包括 <math.h>
.那么编译器不知道sqrt()
的声明和 ceil()
功能:
double sqrt(double x);
double ceil(double x);
您可能会收到有关“隐式声明的函数”的警告。
然后编译器假定这些函数返回一个 int
。因此会产生可能导致任何类型的未定义行为的错误代码。
关于c - 使用埃拉托色尼筛法求素数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035894/
我是一名优秀的程序员,十分优秀!