Функция должна удалить из массива все простые числа и вернуть указатель на новый динамический массив

Вопрос: Написать функцию, которая получает указатель на динамический массив и его размер. Функция должна удалить из массива все простые числа и вернуть указатель на новый динамический массив. Размер первого рабочего массива вводиться пользователем, а элементы массива заполняются случайным образом. Я сам не понял как задать условие и код не додумал,единственное что знаю что можно код "облегчить" при помощи Решето Эратосфена но как с массивом его использовать понять пока не могу,если возможно я бы хотел не использовать дополнительные библиотеки кроме iostream 1. Можно ли изменять переданный массив(Да); 2. Какого размера массив создавать (Вернуть массив размер которого равен количеству элементов без простых чисел)


Ответы (1 шт):

Автор решения: Harry

Помня, что вы все же что-то делали в предыдущем вопросе, так что это не чисто "сделайте за меня" :), вот вам простейшее решение:

bool isPrime(int n)
{
    for(int i = 2; i*i <= n; i++)
        if (n%i == 0) return false;
    return true;
}

int * killPrimes(int * a, int& N)
{
    int j = 0;
    for(int i = 0; i < N; ++i)
    {
        if (!isPrime(a[i]))
            a[j++] = a[i];
    }
    int * b = new int[N = j];
    for(int i = 0; i < N; ++i)
    {
        b[i] = a[i];
    }
    return b;
}

int main()
{
    int N = 40;
    int a[40];
    for(int i = 0; i < N; ++i)
        cout << (a[i] = rand()%30) << " ";
    cout << endl;

    int * b = killPrimes(a,N);
    for(int i = 0; i < N; ++i)
        cout << b[i] << " ";
    cout << endl;

}

Функцию bool isPrime(int n) можно написать как минимум в 2 раза эффективнее, но это уже вы сами, как домашнее задание :)

→ Ссылка