Задать вопрос
@ghost_101
студент-первак

Поиск простых чисел с помощью решета Эратосфена. Почему идёт неправильный вывод и выдаёт ошибку?

Необходимо найти в массиве, заданной длины, простые числа и вывести их на экран с помощью решета Эратосфена. Не могу понять, где ошибки. С динамическим массивом работаю впервые.

#include <stdio.h>
#include <malloc.h>


int IsItSimple(int N)
{
	for (int i = 2; i * i <= N; i++)  
		if (N % i == 0) {
			return 0;
		}
	return 1;
}

int main(void) {
	int* Array;
	int ArrLength, j = 1;
	scanf_s("%d", &ArrLength);

	Array = (int*)malloc(ArrLength * sizeof(int));

	for (int i = 0; i < ArrLength; i++) {
		Array[i] = i + 1;
	}

	while (j <= ArrLength) {
		if (IsItSimple(Array[j]) == 1 && Array[j] != 0) {
			int temp = j;
			while (temp <= ArrLength) {
				temp = temp + Array[j];
				Array[temp] = 0;
				
			}
		}
		j++;
	}


	for (int i = 1; i < ArrLength; i++) {
		if (Array[i] != 0) {
			printf("%d ", Array[i]);
		}
	}

	free(Array);

	return 0;


}
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@crazywu
Во-первых, согласно методу решета Эратосфена вам абсолютно ни к чему дополнительно проверять встретившееся в массиве не нулевое числа на простоту (функция IsItSimple).
Во-вторых, вы выделяете память в Array для ArrLength числа аргументов, но пытаетесь обращаться к ArrLenght+1 аргументу while (j <= ArrLength) т.к. используете j в качестве индекса, а индексы массива ведут отчет с 0.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы