gpt4 book ai didi

c - 大于 200 万的埃拉托色尼筛 [C]

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:42 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来命名所有不超过 n 的素数。当我输入大于 200 万的数字时,程序崩溃。有人可以帮助我吗?

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

void sieve(unsigned long long int n, char primes[]);

int main()
{
unsigned long long int i, n = 2000000; // find the primes up to 500000
char v[n];
sieve(n, v);
for (i=0;i<n;i++)
if (v[i] == 1)
printf("%I64u\n",i); // this just prints out each value if it's Prime
}

void sieve(unsigned long long int n, char primes[])
{
unsigned long long int i, j;
for (i=0;i<n;i++)
primes[i]=1; // we initialize the sieve list to all 1's (True)
primes[0]=0,primes[1]=0; // Set the first two numbers (0 and 1) to 0 (False)
for (i=2;i<sqrt(n);i++) // loop through all the numbers up to the sqrt(n)
for (j=i*i;j<n;j+=i) // mark off each factor of i by setting it to 0 (False)
primes[j] = 0;
}

错误信息:

Process returned -1073741571 (0xC00000FD) execution time : 2.032 s

最佳答案

坚持本站名称;您遇到堆栈溢出。 ;-)

尝试

char *v = malloc(n);

void sieve(unsigned long long int n, char *primes)

分别。当然,你还需要

free(v);

除此之外,我还没有检查你的算法是否正确。

关于c - 大于 200 万的埃拉托色尼筛 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559937/

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