Prime Sieve无输出

时间:2014-05-20 05:07:01

标签: c sieve

我试图用筛子打印出一组特定的素数,但我似乎没有得到任何输出,但它都编译得很好。程序不会退出,除非我强迫它,所以我猜测它卡在某个地方......我怎么能解决这个问题?

#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;

}

1 个答案:

答案 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开始。