В приведённом ниже коде не получается использовать динамическую память.
Я выделяю указателю динамическую память под max элементов , далее пытаюсь записать в часть памяти несколько значений для дальнейшего сравнения. Например
*parr = 2;
*(parr + 1) = 3;
*(parr + 2) = 5;
Но указатель не переходит выше по элементам , а пишет всё в один (точнее переписывает значение в этом же элементе)
long* parry(nullptr); // пустой указатель.
long trial = 5; // кандидат на простое число.
int count = 3; // кол-во простых чисел (объявленных)
int found = 0; // признак обнаружения простого числа.
int max2 = 0; // определяем кол-во простых чисел
cout << "enter the numbers of digits: ";
cin >> max2;
parry = new long[max2]; // выделяю память под max2 элементов.
//
// собственно проблема на следующей строке.
*parry = 2; // пишу в первый элемент 2.
*(parry + 1) = 3; // пишу во второй элемент 3.
*(parry + 2) = 5; // пишу в 3-ий 5.
do {
trial += 2;
found = 0;
for (int i = 0; i < count; ++i)
{
found = (trial % *(parry + i)) == 0;
if (found)
break;
}
if(found == 0)
*(parry + count++) = found;
} while (count < max2);
for (int i = 0; i < max2; ++i)
{
if (i % 5 == 0)
cout << endl;
cout << setw(6) << *(parry + i);
}
delete[] parry;
parry = nullptr;
cout << endl;
return 0;
}
Ответ
Измените код
if(found == 0)
*(parry + count++) = found;
на следующий
if(found == 0)
*(parry + count++) = trial;
У вас происходит заполнение нулями и при следующих итерациях идёт деление на ноль вот тут
found = (trial % *(parry + i)) == 0;
Работающий пример
Комментариев нет:
Отправить комментарий