Хочу найти простые числа в диапазоне [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, то все прекрасно работает.
C/C++
Не выводит элементы массива(C++)
%1
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== ) в конце программы).
#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
Ой, ну это как-то сложновато) Я только начал учить с++, мне для егэшки. Меня просто интересует, почему при определенном количестве элементов массива все выводится, а в другом случае - нет
Похожие вопросы
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Как удалить элемент массива в C++
- Каким образом можно удалить элементы из динамического массива C++(без использования вспомогательного массива)
- В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива
- Вычислить произведение нечетных элементов массива В с++
- Можно ли через функцию memset записать число в элемент массива больше чем 255? (Си)
- Упорядочить элементы массива по возрастанию на языке Си
- Сортировка элементов массива методом Шелла
- Помощь с Массивами C++