C++ Program to find all prime numbers in a Linked List
In this tutorial, we shall be printing all the prime numbers in a Linked List. Given a singly linked list, the aim is to print the nodes containing a prime number. A prime number is a positive number that has only two divisors 1 and itself.
Input: List = 15 -> 5 -> 16 -> 12 -> 17 Output: 5 17 Input: List = 1 -> 3 -> 19 -> 5 -> 6 -> 10 -> 17 Output: 3 19 5 17
We use an optimized school method to find if a node is a prime number. To check if n is a prime, generally we iterate from 2 to n-1 and check if it divides n. But in our algorithm, instead of iterating till n-1, we iterate till √n because a larger factor of n must have been a multiple of smaller factor.
All integers can be expressed in the form of (6k + i) for some integer k and for i = −1, 0, 1, 2, 3, 4. 2 divides (6k + 0), (6k + 2), (6k + 4) and 3 divides (6k + 3). Therefore, every prime number greater than 3 can be represented in the form of 6k ± 1. We ignore 1 as it is not a prime number. We eliminate the multiples of 2 and 3 so that all the composite numbers below 25 are eliminated. For every number, we check if it is prime and return it.
Below is our complete given C++ Program to find all prime numbers in a Linked List:
// C++ implementation to find prime numbers in the singly linked list
#include <bits/stdc++.h>
using namespace std;
// Node of the singly linked list
struct Node {
int data;
Node* next;
};
void push(Node** head_ref, int new_data)
{
Node* new_node = new Node;
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
// Function to check if a number is prime
int isPrime(int n)
{
// Corner cases
if ((n == 2) || (n == 3))
return n;
if (n == 1 || n % 2 == 0 || n % 3 == 0)
return -1;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return -1;
return n;
}
void getPrime(Node** head_ref)
{
Node* ptr = *head_ref;
while(ptr != NULL) {
int p = isPrime(ptr->data);
if (p != -1) {
cout << p << " ";
}
ptr = ptr->next;
}
}
// Driver program
int main()
{
// Empty Linked List
Node* head = NULL;
// Push elements into linked list
// 1 -> 3 -> 19 -> 5 -> 6 -> 10 -> 17
push(&head, 17);
push(&head, 10);
push(&head, 6);
push(&head, 5);
push(&head, 19);
push(&head, 3);
push(&head, 1);
// Call the function to print require answer
cout << "Prime nodes are: ";
getPrime(&head);
return 0;
}
Output: Prime nodes are: 3 19 5 17
From the output, we can say that we are successfully able to do our task.
I am Vamsi Krishna and You can find my posts here
Also Read: How to find all Prime numbers less than or equal to N by sieve of Eratosthenes in Python.
Thank You for Reading and Keep Learning 🙂
Leave a Reply