gpt4 book ai didi

c - Prime Sieve 无输出

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:47 27 4
gpt4 key购买 nike

我正在尝试使用筛子打印出一组特定的素数,但我似乎没有得到任何输出,但它编译正常。程序不会退出,除非我强制执行,所以我猜它卡在了某个地方...我该如何解决这个问题?

#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

int64_t* prime_vector(int64_t start);

int64_t* prime_vector(int64_t start) {

int64_t* vector = calloc(7,sizeof(int64_t));

int64_t maxnum = 2000000;

int64_t *isprime = calloc(maxnum, sizeof(int64_t));

for (int i=0; i < maxnum; i++){
isprime[i] = 1;
}

for (int64_t i=0; i*i < maxnum; i++){
if (isprime[i]){
for (int64_t j = i*i; j<maxnum; j+=i){
isprime[j] =0;
}

}

}

int64_t count = 0;
int64_t max = 7;
int64_t number = start;
int64_t j = 0;


for (int64_t i = number; i<maxnum;i++){
if (count < max && isprime[i]){
vector[j] = i;
count++;
j++;
}

}
free(isprime);
return vector;

}


int main (void){

int64_t* array = prime_vector(13);

for (int i=0; i<7; i++){
printf("%d\n",array[i]);
}

return 0;

}

最佳答案

你有一个无限循环 - 当你的外循环 i = 0 然后内循环增量 j+=i 根本不会增加。

 for (int64_t i=0; i*i < maxnum; i++){
if (isprime[i]){
for (int64_t j = i*i; j<maxnum; j+=i){
isprime[j] =0;
}
}
}

鉴于 0 和 1 不是质数,我会将它们分配为 isprime[] = 0 并从 2 开始 i。

关于c - Prime Sieve 无输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23751406/

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