Cho trước với n nút và nhiệm vụ là in tích của tất cả các nút nguyên tố trong một danh sách liên kết. Các nút chính là những nút sẽ có giá trị chính làm vị trí đếm của chúng.
Đầu vào
10 20 30 40 50
Đầu ra
4,00,000
Giải thích - 10 ở giá trị chỉ số 1 không phải là số nguyên tố nên nó sẽ bị bỏ qua. Di chuyển đến 20 với giá trị chỉ số 2 là một số nguyên tố nên nó sẽ được xem xét. Tương tự, 40 và 50 ở các vị trí chỉ mục chính.
Sản phẩm - 20 * 40 * 50 =4,00,000
Trong sơ đồ trên, các nút màu đỏ đại diện cho các nút chính
Phương pháp tiếp cận được sử dụng bên dưới như sau
-
Lấy một con trỏ tạm thời, giả sử, nút tạm thời của loại nút
-
Đặt con trỏ tạm thời này thành nút đầu tiên được trỏ bởi con trỏ đầu
-
Di chuyển tạm thời sang tạm thời → tiếp theo và kiểm tra xem nút đó là nút chính hay nút không nguyên tố. Nếu nút là nút chính
-
NÊN đặt product =product * (tạm thời → dữ liệu)
-
Nếu nút không phải là nút chính, hãy chuyển sang nút tiếp theo
-
In giá trị cuối cùng của biến sản phẩm.
Thuật toán
Start Step 1 → create structure of a node to insert into a list struct node int data; node* next End Step 2 → declare function to insert a node in a list void push(node** head_ref, int data) Set node* newnode = (node*)malloc(sizeof(struct node)) Set newnode→data = data Set newnode→next = (*head_ref) Set (*head_ref) = newnode End Step 3 → Declare a function to check for prime or not bool isPrime(int data) IF data <= 1 return false End IF data <= 3 return true End IF data % 2 = 0 || data % 3 = 0 return false Loop For int i = 5 and i * i <= data and i = i + 6 IFdata % i = 0 || data % (i + 2) = 0 return false End End return true Step 4→ declare a function to calculate product void product(node* head_ref) set int product = 1 set node* ptr = head_ref While ptr != NULL IF (isPrime(ptr→data)) Set product *= ptr→data End Set ptr = ptr→next End Print product Step 5 → In main() Declare node* head = NULL Call push(&head, 10) Call push(&head, 2) Call product(head) Stop
Ví dụ
#include <bits/stdc++.h> using namespace std; //structure of a node struct node{ int data; node* next; }; //function to insert a node void push(node** head_ref, int data){ node* newnode = (node*)malloc(sizeof(struct node)); newnode→data = data; newnode→next = (*head_ref); (*head_ref) = newnode; } // Function to check if a number is prime 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 = i + 6) if (data % i == 0 || data % (i + 2) == 0) return false; return true; } //function to find the product 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 of a linked list = " << 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; }
Đầu ra
Nếu chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Product of all the prime nodes of a linked list = 14