巨大な配列をスタックに割り当てています:
int prime[2000000]={};
4バイト×200万は8メガバイトに相当します。これはしばしば最大スタックサイズです。それ以上のものを割り当てると、セグメンテーション違反が発生します。
代わりに、配列をヒープに割り当てる必要があります。
int *prime;
prime = malloc(2000000 * sizeof(int));
if(!prime) {
/* not enough memory */
}
/* ... use prime ... */
free(prime);