เราได้รับอาร์เรย์ของจำนวนเฉพาะที่จัดเรียงแบบสุ่ม ขนาดของอาร์เรย์คือ N เป้าหมายคือการหาลำดับที่ยาวที่สุดของจำนวนเฉพาะที่อยู่ติดกันในอาร์เรย์
จำนวนเฉพาะคือจำนวนที่มีตัวประกอบเพียง 2 ตัว คือ 1 และจำนวนเฉพาะ 1,2,3,5,7,11,13….เป็นจำนวนเฉพาะในขณะที่ 4,6,8,9,10….20 ไม่ใช่จำนวนเฉพาะ จำนวนที่ไม่ใช่เฉพาะทุกตัวมีตัวประกอบมากกว่า 2 ตัว มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − Arr[] ={ 1,3,5,2,6,7,13,4,9,10
ผลผลิต − 3
คำอธิบาย − จำนวนเฉพาะในอาร์เรย์ด้านบนคือ 3,5,2,7,13 ตัวเลขที่ติดกันคือ 3,5,2 และ 7,13 ลำดับที่ยาวที่สุดมี 3 ตัวเลข คำตอบคือ 4.
ป้อนข้อมูล − Arr[] ={ 5,7,17,27,31,21,41 }.
ผลผลิต − 3
คำอธิบาย − จำนวนเฉพาะในอาร์เรย์ด้านบนคือ 5,7,17,31,41 ตัวเลขที่อยู่ติดกันคือ 5,7,17 ลำดับที่ยาวที่สุดมี 3 ตัวเลข คำตอบคือ 3.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
อาร์เรย์จำนวนเต็ม Arr[] ใช้เพื่อเก็บตัวเลขเฉพาะและไม่ใช่เฉพาะ
-
ฟังก์ชัน isprime(int num) ใช้เพื่อตรวจสอบว่า num เป็นจำนวนเฉพาะหรือไม่ หากเป็นจำนวนเฉพาะก็จะต้องไม่มีตัวประกอบจนกว่าจะถึงครึ่งหนึ่ง
-
สำหรับจำนวนเฉพาะ isprime() คืนค่า 1 มิฉะนั้นจะคืนค่า 0
-
ฟังก์ชัน primeSubarray(int arr[], int n) รับพารามิเตอร์อินพุตสองตัว อาร์เรย์ของตัวเลขขนาดของมันเอง ส่งกลับขนาดของลำดับที่ยาวที่สุดของจำนวนเฉพาะที่อยู่ติดกัน
-
สำรวจตัวเลขใน arr[] ตั้งแต่เริ่มต้น หาก arr[i] ไม่ใช่ไพรม์ ( isprime(arr[i])==0 ) แล้วเปลี่ยนจำนวนเฉพาะที่อยู่ติดกันเป็น 0
-
หากเป็นจำนวนเฉพาะ ให้เพิ่มจำนวนเฉพาะ (จะเริ่มจาก 0 อีกครั้งหากพบ nonprime)
-
ตรวจสอบว่าการนับสูงสุดจนถึงตอนนี้หรือไม่ หากใช่ ให้เก็บค่าไว้ที่ maxC
-
คืนค่า maxC เป็นผลลัพธ์
ตัวอย่าง
#include <iostream>
#include <stdio.h>
int isprime(int num){
if (num <= 1)
return 0;
for (int i = 2; i <= num/2; i++)
if (num % i == 0)
return 0;
return 1; //if both failed then num is prime
}
int primeSubarray(int arr[], int n){
int count=0;
int maxSeq=0;
for (int i = 0; i < n; i++) {
// if non-prime
if (isprime(arr[i]) == 0)
count = 0;
//if prime
else {
count++;
//printf("\n%d",arr[i]); print prime number subsequence
maxSeq=count>maxSeq?count:maxSeq;
}
}
return maxSeq;
}
int main(){
int arr[] = { 8,4,2,1,3,5,7,9 };
int n =8;
printf("Maximum no. of contiguous Prime Numbers in an array: %d",
primeSubarray(arr, n));
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Maximum no. of contiguous Prime Numbers in an array : 3