我试图用筛子打印出一组特定的素数,但我似乎没有得到任何输出,但它都编译得很好。程序不会退出,除非我强迫它,所以我猜测它卡在某个地方......我怎么能解决这个问题?
#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;
}
答案 0 :(得分:1)
你有一个无限循环 - 当你的外循环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;
}
}
}
鉴于零和1不是素数,我会将它们指定为isprime[] = 0
并从2开始。