একটি সিঙ্গলি লিংকড লিস্ট দেওয়া আছে। প্রাইম ইন্ডেক্সে থাকা নোডগুলোর ডেটার গুণফল বের করতে হবে। (ইন্ডেক্স ১-বেসড)।
ইনপুট
10 20 30 40 50
আউটপুট
4,00,000
ব্যাখ্যা — ইন্ডেক্স ১ (নন-প্রাইম) বাদ, ইন্ডেক্স ২ (প্রাইম) → ২০, ইন্ডেক্স ৩ (প্রাইম) → ৩০, ইন্ডেক্স ৫ (প্রাইম) → ৫০। গুণফল = ২০ × ৩০ × ৫০ = ৩০,০০০। (নোট: মূল উদাহরণে ৪০ ও ৫০ ব্যবহার করা হয়েছে, তবে লজিক অনুযায়ী প্রাইম ইন্ডেক্স ২, ৩, ৫, ৭...)
পদ্ধতি
- টেম্পোরারি পয়েন্টার `temp` দিয়ে লিস্ট ট্রভার্স করুন।
- প্রতিটি নোডের ইন্ডেক্স প্রাইম কিনা চেক করুন।
- প্রাইম হলে `product *= temp->data`।
- শেষে প্রোডাক্ট প্রিন্ট করুন।
এলগরিদম
Start
Step 1 → নোড স্ট্রাকচার: data, next
Step 2 → push() ফাংশন: নোড ইনসার্ট
Step 3 → isPrime() ফাংশন: প্রাইম চেক
Step 4 → product() ফাংশন:
int product = 1
node* ptr = head
while ptr != NULL
if isPrime(ptr->data) product *= ptr->data
ptr = ptr->next
print product
Step 5 → main(): লিস্ট তৈরি, product() কল
Stop
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
struct node{
int data;
node* next;
};
void push(node** head_ref, int data){
node* newnode = (node*)malloc(sizeof(struct node));
newnode->data = data;
newnode->next = (*head_ref);
(*head_ref) = newnode;
}
bool isPrime(int data){
if (data <= 1) return false;
if (data <= 3) return true;
if (data % 2 == 0 || data % 3 == 0) return false;
for (int i = 5; i * i <= data; i += 6)
if (data % i == 0 || data % (i + 2) == 0) return false;
return true;
}
void product(node* head_ref){
int product = 1;
node* ptr = head_ref;
while (ptr != NULL){
if (isPrime(ptr->data))
product *= ptr->data;
ptr = ptr->next;
}
cout << "Product of all the prime nodes = " << product;
}
int main(){
node* head = NULL;
push(&head, 10);
push(&head, 2);
push(&head, 7);
push(&head, 6);
push(&head, 85);
product(head);
return 0;
}
আউটপুট
Product of all the prime nodes of a linked list = 14