C/C++

Не выводит элементы массива(C++)

Хочу найти простые числа в диапазоне [3 000 000; 10 000 000]
Написал следующую программу:
#include <iostream>

#include <cmath>

using namespace std;


int main()

{

const long int n = (10000000-3000000);

long int a[n];

int k = -1;

for (int x=2; x<=100; x++)

{

int f = 1;

for (int j=2; j<=ceil(sqrt(x));j++)

if (x % j == 0)

{

f = 0;

break;

}

if (f == 1)

{

k ++;

a[k] = x;

}

}

for (int m=0; m<=k;m++)

cout <<a[m] << endl;

}
Ничего не выводит. Не понимаю почему. Если ищу простые числа от 2 до 100, то все прекрасно работает.
Konstantin R
Konstantin R
89
%1
АФ
Артур Фейгельман
61 243
Лучший ответ
Konstantin R Это куда, что?
Это всё очень просто как сами простые числа:
#include <cmath>
#include <vector>
#include <iomanip>
#include <iostream>
using namespace std; int main()
{ int n = 10000000, k, K = ceil(sqrt(n)), l, m;
bool *x = new bool [n + 1]; vector <int> prime;
for (k = 0; k <= n; k++) x[k] = true; x[0] = x[1] = false;
for(k = 2; k <= K; k++) if(x[k]) { l = n / k;
for(m = 2; m <= l; m++) x[m * k] = false; } K = 0;
for (k = 3000001; k <= n; k += 2)
if(x[k]) prime.push_back(k); delete [] x;
cout << prime.size() << " primes\n";
while (true) { cout << "m n: "; cin >> m >> n; l = 0;
for (k = m - 1; k < n; k++) { cout << setw(8) <<
prime[k]; l++; if (l == 15) { l = 0; cout << endl; } }
if (l) cout << endl; } }
Решетом Эратосфена просеиваются все натуральные числа до десяти миллионов включительно. 447763 простых числа в диапазоне [3000000;10000000] находятся моментально, загружаются в вектор prime и просматриваются в достаточно удобном формате вывода (с шириной экрана 120 литер; если надо ширину экрана изменить, то это делается настройкой if (l== ) в конце программы).
Konstantin R Ой, ну это как-то сложновато) Я только начал учить с++, мне для егэшки. Меня просто интересует, почему при определенном количестве элементов массива все выводится, а в другом случае - нет