gpt4 book ai didi

c - 使用埃拉托色尼筛法求素数之和

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:35 26 4
gpt4 key购买 nike

我用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com