Другие языки программирования и технологии

Решите, пожалуйста задачу на С++

Дан массив, компоненты которого являются натуральными числами. Определить функцию для вычисления количества:
а) нулевых компонент;
б) компонент, которые являются простыми числами.
#include <iostream>
using namespace std;
void show(unsigned* box, const size_t n) {
for (auto i = 0U; i < n; ++i) cout << ' ' << box[i];
cout.put('\n');
}
size_t count_zero(unsigned* box, const size_t n) {
auto x = 0U;
for (auto i = 0U; i < n; ++i) if (!box[i]) ++x;
return x;
}
bool is_prime(unsigned num) {
const static auto zero = 0U, one = 1U, two = 2U, three = 3U, five = 5U;
bool prime;
if (num <= five && (num <= two || num == three || num == five)) {
prime = true;
} else if (~num & one || zero == num % three || zero == num % five) {
prime = false;
} else {
unsigned n;
for (n = three; n * n <= num && num % n; n += two) { ; }
prime = n * n > num? true : false;
}
return prime;
}
size_t count_prime(unsigned* box, const size_t n) {
auto x = 0U;
for (auto i = 0U; i < n; ++i) if (is_prime(box[i])) ++x;
return x;
}
int main() {
unsigned box[] = { 2, 3, 4, 6, 0, 0, 8, 9, 7, 3, 2, 1, 0, 4, 0, 2, 0 };
show(box, size(box));
auto zero = count_zero(box, size(box));
auto prime = count_prime(box, size(box));
cout << " Zero: " << zero << "\n Prime: " << prime << '\n';
system("pause");
}
Марат Танабаев
Марат Танабаев
64 796
Лучший ответ
#include "iostream"
#include "cmath"
#include "ctime"
#include "cstdlib"
using namespace std;
bool prime(int i){
if(i<=1)return false; int b=sqrt(i+1); for(int j=2;j<=b;j++)if(i%j==0)return j>b;}
int fz(int a[], int n){int k=0; for(int i=0;i< n;i++)k+=!a[i]; return k;}
int fp(int a[], int n){int k=0; for(int i=0;i< n;i++)if(prime(a[i]))k++; return k;}
int main(){
int n; cout<<"n: "; cin>>n; int *a=new int[n]; srand(time(NULL));
for(int i=0;i< n;i++)cout<<(a[i]=rand()% 10)<<' '; cout<< endl;
cout<<"\nZeros: "<<fz(a,n)<<"\nPrimes: "<<fp(a,n)<<'\n'; delete []a;}
#include <iostream>

bool isPrime(unsigned n) {
  if (n <= 1) return false;
  unsigned i = 2;
  while (n % i)
    i++ ;
  return (i == n);
}
size_t countF(unsigned * v, size_t size, bool (*F)(unsigned)) {
  size_t count = 0;
  for (size_t i=0; i < size; ++i)
    if (F(v[i])) count++;
  return count;
}
int main()
{
  unsigned v[] ={3,2,3,4,5,0, 6,7,23,5};
  size_t size = sizeof(v)/sizeof(v[0]);
  std::cout << "count of prime numbers: "<< countF(v, size, isPrime) << std::endl;
  std::cout << "count of zero numbers: " << countF(v, size, [](unsigned a) {return! a;}) << std::endl;
}