1

ふるいを使用して特定の素数のセットを出力しようとしていますが、出力が得られないようですが、すべて正常にコンパイルされます。強制しない限りプログラムが終了しないので、どこかでスタックしていると思います...どうすれば修正できますか?

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

}
4

1 に答える 1

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

0 と 1 は素数ではないので、これらを as に割り当て、isprime[] = 0i を 2 から始めます。

于 2014-05-20T05:23:05.073 に答える