เราได้รับอาร์เรย์ของจำนวนเต็มบวก เป้าหมายคือการหาอาร์เรย์ย่อยของตัวเลขในอาร์เรย์ที่แต่ละ subarray มีผลรวมเป็นจำนวนเฉพาะ ถ้าอาร์เรย์เป็น { 1,2,3,4 } จากนั้นอาร์เรย์ย่อยจะเป็น {1,2}, {2,3}, {3,4} จำนวนอาร์เรย์ย่อยดังกล่าวคือ 3
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − arr[] ={1,3,5,3,2 };
ผลผลิต − จำนวนอาร์เรย์ย่อยที่มีจำนวนเฉพาะคือ:3
คำอธิบาย − Subarrays จะเป็น:{ 3,2} sum=5 ไพรม์, {3,5,3} sum=11 ไพรม์ และ {3,5,3,2} ผลรวมคือ 13 ไพรม์
ป้อนข้อมูล − arr[] ={2,4,6 };
ผลผลิต − จำนวนอาร์เรย์ย่อยที่มีผลรวมเฉพาะ:0
คำอธิบาย − อาร์เรย์ย่อยทั้งหมดมีผลรวมที่ไม่ใช่จำนวนเฉพาะ {2,4}=6, {4,6}=10
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
เราจะค้นหาจำนวนเฉพาะทั้งหมดที่น้อยกว่าค่าสูงสุด 107 โดยใช้ตะแกรงและเก็บไว้ในกาเครื่องหมาย vector
-
หาอาร์เรย์ arr[] ของจำนวนเต็มบวก
-
ฟังก์ชัน sub_prime(int arr[], int size) รับอาร์เรย์และส่งกลับจำนวนอาร์เรย์ย่อยที่มีผลรวมเป็นจำนวนเฉพาะ
-
นับเริ่มต้นเป็น 0
-
เริ่มต้น temp=pow(10,7) เป็นค่าสูงสุด
-
เริ่มต้นการตรวจสอบเวกเตอร์ด้วยค่าจริง
-
check[0] และ check[1] เป็นเท็จ เนื่องจากไม่ใช่ไพรม์
-
จาก i=2 ถึง i*i
-
ตอนนี้การตรวจสอบเวกเตอร์[i] เป็นจริงถ้าฉันเป็นจำนวนเฉพาะอย่างอื่นเป็นเท็จ
-
Traverse array อีกครั้งโดยใช้ two for loops
-
นำผลรวมของตัวแปรเป็นผลรวมขององค์ประกอบในอาร์เรย์ย่อย Arr[i] ถึง arr[j] โดยที่ i=0 ถึง i<ขนาด-1และ j=i+1 ถึง j<ขนาด
-
หากมีการตรวจสอบใด ๆ [ทั้งหมด] เป็นจริง ( ผลรวมทั้งหมดเป็นจำนวนเฉพาะ ). จำนวนที่เพิ่มขึ้น
-
นับกลับเมื่อสิ้นสุดการวนซ้ำทั้งหมดตามผลลัพธ์
ตัวอย่าง
#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; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of subarrays with Prime sum are: 1