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

Đếm các subarrays với Prime sum trong C ++

Chúng ta được cung cấp một mảng các số nguyên dương. Mục đích là tìm các mảng con của các số trong một mảng sao cho mỗi mảng con có tổng là số nguyên tố. Nếu mảng là {1,2,3,4}. Khi đó, các mảng con sẽ là {1,2}, {2,3}, {3,4}. Tổng số mảng con như vậy là 3.

Hãy cho chúng tôi hiểu với các ví dụ

Đầu vào - arr [] ={1,3,5,3,2};

Đầu ra - Số mảng con có tổng Nguyên tố là:3

Giải thích - Các phân thức con sẽ là:{3,2} sum =5 nguyên tố, {3,5,3} sum =11 nguyên tố và tổng {3,5,3,2} là 13 nguyên tố.

Đầu vào - arr [] ={2,4,6};

Đầu ra - Đếm các mảng con có tổng nguyên tố là:0

Giải thích - Tất cả các mảng con đều có tổng không nguyên tố. {2,4} =6, {4,6} =10

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

Chúng tôi sẽ tìm tất cả các số nguyên tố nhỏ hơn giá trị lớn nhất 107 bằng cách sử dụng một cái sàng và lưu nó trong kiểm tra vectơ . Nếu bất kỳ số nào là số nguyên tố thì kiểm tra [i] là đúng, còn lại là sai. Sau đó duyệt qua mảng bằng cách sử dụng hai vòng lặp for, tiếp tục thêm các phần tử trong tổng của mảng con và kiểm tra xem nó có phải là số nguyên tố hay không bằng cách sử dụng check [sum]. Nếu có thì hãy tăng số lượng cho các mảng con có tổng nguyên tố.

  • Lấy một mảng arr [] của các số nguyên dương.

  • Hàm sub_prime (int arr [], int size) nhận mảng và trả về số lượng các mảng con có tổng là số nguyên tố.

  • Lấy số lượng ban đầu là 0.

  • Khởi tạo temp =pow (10,7) làm giá trị lớn nhất.

  • Khởi tạo kiểm tra vectơ với true.

  • kiểm tra [0] và kiểm tra [1] có sai vì chúng không phải là số nguyên tố.

  • Từ i =2 đến i * i

  • Bây giờ kiểm tra vectơ [i] là đúng nếu tôi là số nguyên tố khác là sai.

  • Đảo ngược mảng một lần nữa bằng cách sử dụng hai vòng lặp for.

  • Lấy tổng biến làm tổng của các phần tử trong mảng con. Arr [i] thành arr [j]. Trong đó i =0 đến i

  • Nếu bất kỳ kiểm tra nào [tổng số] là đúng. (tổng tổng là số nguyên tố). Số lượng tăng dần.

  • Kết quả là số lượng trả về ở cuối tất cả các vòng lặp.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int sub_prime(int arr[], int size){
   int count = 0;
   int temp = int(pow(10, 7));
   vector check(temp + 1, true);
   check[0] = false;
   check[1] = false;
   for (int i = 2; i * i <= temp; i++){
      if (check[i] == true){
         for (int j = i * 2; j <= temp; j += i){
            check[j] = false;
         }
      }
   }
   for (int i = 0; i < size - 1; ++i){
      int total = arr[i];
      for (int j = i + 1; j < size; ++j){
         total += arr[j];
         if (check[total]){
            ++count;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 5, 1, 9, 5 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of subarrays with Prime sum are: "<<sub_prime(arr, size);
   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 subarrays with Prime sum are: 1