Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 배열에 있는 복합 요소의 개수 및 합계

<시간/>

양의 정수 배열이 주어지고 주어진 배열에 있는 복합 요소의 개수와 합계를 계산하는 작업이 주어집니다.

복합수란 무엇입니까

주어진 정수 집합에서 소수가 아닌 숫자는 합성도 소수도 아닌 단위 숫자인 1을 제외하고 합성 숫자라고 합니다. 따라서 숫자는 숫자 1을 제외하고 소수 또는 합성일 수 있음이 명확하게 명시되어 있습니다.

100까지의 합성은 다음과 같습니다 -

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

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

설명 - 4, 6, 8, 9, 10은 주어진 배열에 존재하는 합성 숫자입니다. 따라서 그들의 개수는 5이고 합은 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

설명 - 4는 주어진 배열에 있는 유일한 합성수입니다. 따라서 개수는 1이고 합계는 4입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. &miuns;

  • 양의 정수 배열 입력

  • 크기 계산

  • 합성 숫자의 합을 저장하기 위해 변수 sum 초기화

  • 배열에 존재하는 최대값을 변수에 저장

  • 최대값까지 소수 계산

  • 전체 배열을 탐색하고 숫자가 소수인지 여부를 확인합니다. 숫자가 소수가 아니면 합성수가 되고, 그렇다면 합성수의 개수를 1로 늘리고 그 값을 합계에 더합니다.

예시

#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;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

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