কম্পিউটার টিউটোরিয়াল

C++-এ অ্যারেতে সান্মুখ্য প্রাইম সংখ্যার সর্বোচ্চ সংখ্যা


আমাদের একটি অ্যারে দেওয়া আছে যাতে প্রাইম ও নন-প্রাইম সংখ্যা র‍্যান্ডম অর্ডারে আছে। অ্যারের আকার N। লক্ষ্য হল অ্যারেতে সান্মুখ্য প্রাইম সংখ্যার সবচেয়ে দীর্ঘ শৃঙ্খলা খুঁজে বের করা।

প্রাইম সংখ্যা হল যেটির শুধু দুটি ফ্যাক্টর থাকে, ১ এবং নিজের সংখ্যাটি। ১,২,৩,৫,৭,১১,১৩... প্রাইম সংখ্যা যেখানে ৪,৬,৮,৯,১০...২০ নন-প্রাইম। প্রতিটি নন-প্রাইম সংখ্যার ২টির বেশি ফ্যাক্টর থাকে। উদাহরণ দিয়ে বুঝি।

উদাহরণ দিয়ে বোঝা যাক

ইনপুট - Arr[] = { 1,3,5,2,6,7,13,4,9,10

আউটপুট - ৩

ব্যাখ্যা - উপরের অ্যারেতে প্রাইম সংখ্যাগুলো হল 3,5,2,7,13। যেসব সংখ্যা সান্মুখ্য সেগুলো হল 3,5,2 এবং 7,13। সবচেয়ে দীর্ঘ শৃঙ্খলাতে ৩টি সংখ্যা আছে। তাই উত্তর ৩। (মূল টেক্সটে ৪ লেখা আছে যা ভুল।)

ইনপুট - Arr[] = { 5,7,17,27,31,21,41 }

আউটপুট - ৩

ব্যাখ্যা - উপরের অ্যারেতে প্রাইম সংখ্যাগুলো হল 5,7,17,31,41। সান্মুখ্য সংখ্যাগুলো হল 5,7,17। সবচেয়ে দীর্ঘ শৃঙ্খলাতে ৩টি সংখ্যা। তাই উত্তর ৩।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • ইন্টিজার অ্যারে Arr[] ব্যবহার করা হয়েছে প্রাইম ও নন-প্রাইম সংখ্যা সংরক্ষণের জন্য।

  • isprime(int num) ফাংশন ব্যবহার করা হয়েছে num প্রাইম কিনা চেক করার জন্য। যদি প্রাইম হয় তবে এর অর্ধেক পর্যন্ত কোনো ফ্যাক্টর থাকবে না।

  • প্রাইম সংখ্যার জন্য isprime() ১ ফেরত দেয় অন্যথায় ০।

  • primeSubarray(int arr[], int n) ফাংশন দুটি ইনপুট নেয়। অ্যারেটা এবং এর আকার। ফেরত দেয় সান্মুখ্য প্রাইম সংখ্যার সর্বোচ্চ শৃঙ্খলার আকার।

  • arr[]-এর সংখ্যাগুলো শুরু থেকে ট্রাভার্স করুন। যদি arr[i] নন-প্রাইম হয় (isprime(arr[i])==0) তবে সান্মুখ্য প্রাইম সংখ্যার কাউন্ট ০ করুন।

  • যদি প্রাইম হয় তবে প্রাইম সংখ্যার কাউন্ট বাড়ান। (নন-প্রাইম পাওয়া গেলে আবার ০ থেকে শুরু হবে)

  • চেক করুন কাউন্টটি এখনো সর্বোচ্চ কিনা, হ্যাঁ হলে তার মান maxC-এ সংরক্ষণ করুন।

  • ফলাফল হিসেবে maxC ফেরত দিন।

C++ প্রোগ্রাম উদাহরণ

#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; // উভয় ফেইল হলে num প্রাইম
}

int primeSubarray(int arr[], int n){
    int count=0;
    int maxSeq=0;
    for (int i = 0; i < n; i++) {
        // যদি নন-প্রাইম
        if (isprime(arr[i]) == 0)
            count = 0;
        // যদি প্রাইম
        else {
            count++;
            //printf("\n%d",arr[i]); // প্রাইম সংখ্যা সাবসিকোয়েন্স প্রিন্ট
            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
  1. সি++ কোড: অ্যারেতে জোড় সংখ্যাগুলো ১ কমিয়ে আপডেট করুন

  2. C++ একটি সংখ্যাকে সর্বোচ্চ সম্ভব প্রাইম সংখ্যাগুলোর যোগফল হিসেবে প্রকাশ করুন

  3. সি++-এ অ্যারেতে মৌলিক সংখ্যা (প্রাইম) গণনা

  4. C++-তে অ্যারেতে থাকা সব প্রাইম নম্বরের গুণফল বের করা