Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm và Tổng các phần tử hỗn hợp trong một mảng trong C ++

Chúng ta được cung cấp một mảng các số nguyên dương và nhiệm vụ là tính tổng số và tổng của các phần tử tổng hợp trong mảng đã cho.

Số tổng hợp là gì

Từ tập hợp các số nguyên đã cho, các số không phải là số nguyên tố được gọi là số tổng hợp, ngoại trừ 1, không phải là hợp số cũng không phải là số nguyên tố, thay vào đó nó là một số đơn vị. Vì vậy, nó được tuyên bố rõ ràng rằng một số có thể là số nguyên tố hoặc hợp số ngoại trừ số 1.

Tổng hợp tối đa 100 được đưa ra bên dưới -

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 
26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 
45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 
63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 
81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 
98, 99, 100

Ví dụ

Input − array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Output − total count of composite numbers is: 5
      Sum of composite number is: 37

Giải thích - 4, 6, 8, 9, 10 là các số hợp có trong một mảng cho trước. Vì vậy, số đếm của chúng là 5 và tổng của chúng là 4 + 6 + 8 + 9 + 10 =37

Input − array[] = {1, 2, 3, 4, 5}
Output − total count of composite numbers is: 1
      Sum of composite number is: 4

Giải thích - 4 là số tổng hợp duy nhất có trong một mảng nhất định. Vì vậy, số đếm của chúng là 1 và tổng của chúng là 4

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau &miuns;

  • Nhập mảng các số nguyên dương

  • Tính toán kích thước của nó

  • Khởi tạo tổng biến để lưu trữ tổng các số phức hợp

  • Lưu trữ giá trị lớn nhất có trong một mảng trong một biến

  • Tính các số nguyên tố cho đến giá trị lớn nhất

  • Duyệt qua toàn bộ mảng và kiểm tra xem số đó có phải là số nguyên tố hay không. Nếu số sau đó không phải là số nguyên tố thì nó sẽ là số tổng hợp và nếu đúng như vậy, thì hãy tăng số tiền cho số tổng hợp lên 1 và cộng giá trị của nó vào tổng

Ví dụ

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Function to find and return the
// the count of the composite numbers
int compcount(int ar[], int num, int* sum){
   // storing the largest element of the array
   int max_val = *max_element(ar, ar + num);
   // Using sieve to find all prime numbers
   // less than or equal to max_val
   // Create a boolean array "prime[0..n]". A
   // value in prime[i] will finally be false
   vector<bool> pr(max_val + 1, true);
   // setting the values of 0 and 1 as
   // true for prime.
   pr[0] = true;
   pr[1] = true;
   for (int p = 2; p * p <= max_val; p++){
      // If prime[p] is not changed, then
      // it is a prime
      if (pr[p] == true){
         // Update all multiples of p
         for (int i = p * 2; i <= max_val; i += p){
            pr[i] = false;
         }
      }
   }
   // Count all composite
   // numbers in the arr[]
   int ans = 0;
   for (int i = 0; i < num; i++){
      if (!pr[ar[i]]){
         ans++;
         *sum = *sum + ar[i];
      }
   }
   return ans;
}
// Driver code
int main(){
   int ar[] = { 1, 2, 3, 4, 5 };
   int num = sizeof(ar) / sizeof(ar[0]);
   int sum = 0;
   cout << "Count of Composite Numbers = "<< compcount(ar, num, &sum);
   cout << "\nSum of Composite Numbers = " << sum;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of Composite Numbers = 1
Sum of Composite Numbers = 4