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