เราได้รับอาเรย์ของจำนวนเต็มบวก เป้าหมายคือหาจำนวนคู่ที่แตกต่างกันของสมาชิกอาเรย์ที่มีสมาชิกอย่างน้อยหนึ่งตัวเป็นจำนวนเฉพาะ หากอาเรย์คือ [1,2,3,4] คู่จะเป็น (1,2), (1,3), (2,3), (2,4) และ (3,4)
มาดูตัวอย่าง
อินพุต − arr[] = { 1,2,4,8,10 };
เอาต์พุต − จำนวนคู่ในอาเรย์ที่มีสมาชิกอย่างน้อยหนึ่งตัวเป็นจำนวนเฉพาะ คือ 4
คำอธิบาย − สมาชิกเฉพาะเพียงตัวเดียวคือ 2 และจับคู่กับทุกตัวอื่นจะได้ − (1,2), (2,4), (2,8), (2,10)
อินพุต − arr[] = { 0,1,4,6,15 };
เอาต์พุต − จำนวนคู่ในอาเรย์ที่มีสมาชิกอย่างน้อยหนึ่งตัวเป็นจำนวนเฉพาะ คือ 0
คำอธิบาย − อาเรย์ไม่มีสมาชิกเฉพาะ
แนวทางที่ใช้ในโปรแกรม
เราจะสร้างอาเรย์ arr_2[] สำหรับทำเครื่องหมายจำนวนเฉพาะและไม่ใช่จำนวนเฉพาะ ถ้า arr_2[i] เป็น 0 แสดงว่า i เป็นจำนวนเฉพาะ มิฉะนั้นไม่ใช่ ถ้าสำหรับคู่ใดค่า arr_2[A], arr_2[B] เป็น 0 คู่ (A,B) จะถูกนับ
- รับอาเรย์
arr[]ของจำนวนเต็มบวก - ฟังก์ชัน
check_prime(int temp, int arr_2[])รับค่าtempสูงสุดและอาเรย์arr_2[]เติมarr_2[]ด้วย 0 สำหรับดัชนีเป็นเฉพาะ มิฉะนั้น 1 - กำหนด
arr_2[0]=arr_2[1]=0เนื่องจาก 0 และ 1 ไม่ใช่จำนวนเฉพาะ - ลูป FOR จาก
i=2ถึงi*i<=temp - ลูปจาก
j=2*iถึงj<=tempและj+=iกำหนดarr_2[j]=1สำหรับไม่ใช่จำนวนเฉพาะ - ฟังก์ชัน
Prime_Pairs(int arr[], int size)รับอาเรย์และขนาด คืนจำนวนคู่ที่มีสมาชิกอย่างน้อยหนึ่งตัวเป็นจำนวนเฉพาะ - กำหนด
countเริ่มต้น 0 - เริ่มต้น
temp=*max_element(arr, arr + size)เป็นค่าสูงสุดในอาเรย์ - เรียก
check_prime(temp,arr_2)โดยarr_2[]เริ่มต้นเป็น 0 และมีความยาวtemp - ตอนนี้เรามี
arr_2[]ที่arr[i]เป็น 0 สำหรับ i เป็นจำนวนเฉพาะ และ 1 สำหรับไม่ใช่ - เดินทางอาเรย์ด้วยลูป FOR สองชั้น จาก
i=0ถึงi<sizeและj=0ถึงj<size - สำหรับแต่ละคู่
arr[i], arr[j]ตรวจสอบถ้าarr_2[arr[i]] == 0 || arr_2[arr[j]] == 0ถ้าจริงเพิ่มcount - คืน
countท้ายสุดของลูปทั้งหมด
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void check_prime(int temp, int arr_2[]){
arr_2[0] = 1;
arr_2[1] = 1;
for(int i = 2; i * i <= temp; i++){
if (arr_2[i]==0){
for (int j = 2 * i; j <= temp; j += i){
arr_2[j] = 1;
}
}
}
}
int Prime_Pairs(int arr[], int size){
int count = 0;
int temp = *max_element(arr, arr + size);
int arr_2[temp + 1];
memset(arr_2, 0, sizeof(arr_2));
check_prime(temp, arr_2);
for (int i = 0; i < size; i++){
for (int j = i + 1; j < size; j++){
if (arr_2[arr[i]] == 0 || arr_2[arr[j]] == 0){
count++;
}
}
}
return count;
}
int main(){
int arr[] = { 3, 5, 2, 7, 11, 14 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of pairs in an array such that at least one element is prime are: "<<Prime_Pairs(arr, size);
return 0;
}
เอาต์พุต
หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of pairs in an array such that at least one element is prime are: 15