Related Articles
Sum of array elements which are prime factors of a given number
• Difficulty Level : Hard
• Last Updated : 10 Mar, 2021

Given an array arr[] of size N and a positive integer K, the task is to find the sum of all array elements which are prime factors of K.

Examples:

Input: arr[] = {1, 2, 3, 5, 6, 7, 15}, K = 35
Output: 12
Explanation: From the given array, 5 and 7 are prime factors of 35. Therefore, required sum = 5 + 7 = 12.

Input: arr[] = {1, 3, 5, 7}, K = 42
Output: 10
Explanation: From the given array, 3 and 7 are prime factors of 42. Therefore, required sum = 3 + 7 = 10.

Approach: The idea is to traverse the array and for each array element, check if it is a prime factor of K or not. Add those elements to the sum, for which the condition satisfies. Follow the steps below to solve the problem:

• Initialize a variable, say sum, to store the required sum.
• Traverse the given array, and for each array element, perform the following operations:
• After complete traversal of the array, print the value of the sum as the result.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to check if a``// number is prime or not``bool` `isPrime(``int` `n)``{``    ``// Corner cases``    ``if` `(n <= 1)``        ``return` `false``;``    ``if` `(n <= 3)``        ``return` `true``;` `    ``// Check if n is a``    ``// multiple of 2 or 3``    ``if` `(n % 2 == 0 || n % 3 == 0)``        ``return` `false``;` `    ``// Above condition allows to check only``    ``// for every 6th number, starting from 5``    ``for` `(``int` `i = 5; i * i <= n; i = i + 6)` `        ``// If n is a multiple of i and i + 2``        ``if` `(n % i == 0 || n % (i + 2) == 0)``            ``return` `false``;` `    ``return` `true``;``}` `// Function to find the sum of array``// elements which are prime factors of K``void` `primeFactorSum(``int` `arr[], ``int` `n, ``int` `k)``{` `    ``// Stores the required sum``    ``int` `sum = 0;` `    ``// Traverse the given array``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// If current element is a prime``        ``// factor of k, add it to the sum``        ``if` `(k % arr[i] == 0 && isPrime(arr[i])) {``            ``sum = sum + arr[i];``        ``}``    ``}` `    ``// Print the result``    ``cout << sum;``}` `// Driver Code``int` `main()``{` `    ``// Given arr[]``    ``int` `arr[] = { 1, 2, 3, 5, 6, 7, 15 };` `    ``// Store the size of the array``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``int` `K = 35;` `    ``primeFactorSum(arr, N, K);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.lang.*;``import` `java.util.*;` `class` `GFG``{` `    ``// Function to check if a``    ``// number is prime or not``    ``static` `boolean` `isPrime(``int` `n)``    ``{``      ` `        ``// Corner cases``        ``if` `(n <= ``1``)``            ``return` `false``;``        ``if` `(n <= ``3``)``            ``return` `true``;` `        ``// Check if n is a``        ``// multiple of 2 or 3``        ``if` `(n % ``2` `== ``0` `|| n % ``3` `== ``0``)``            ``return` `false``;` `        ``// Above condition allows to check only``        ``// for every 6th number, starting from 5``        ``for` `(``int` `i = ``5``; i * i <= n; i = i + ``6``)` `            ``// If n is a multiple of i and i + 2``            ``if` `(n % i == ``0` `|| n % (i + ``2``) == ``0``)``                ``return` `false``;` `        ``return` `true``;``    ``}` `    ``// Function to find the sum of array``    ``// elements which are prime factors of K``    ``static` `void` `primeFactorSum(``int` `arr[], ``int` `n, ``int` `k)``    ``{` `        ``// Stores the required sum``        ``int` `sum = ``0``;` `        ``// Traverse the given array``        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``// If current element is a prime``            ``// factor of k, add it to the sum``            ``if` `(k % arr[i] == ``0` `&& isPrime(arr[i]))``            ``{``                ``sum = sum + arr[i];``            ``}``        ``}` `        ``// Print the result``        ``System.out.println(sum);``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{` `        ``// Given arr[]``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``5``, ``6``, ``7``, ``15` `};` `        ``// Store the size of the array``        ``int` `N = arr.length;``        ``int` `K = ``35``;``        ``primeFactorSum(arr, N, K);``    ``}``}` `// This code is contributed by Kingash.`

## Python3

 `# Python3 program for the above approach` `# Function to check if a``# number is prime or not``def` `isPrime(n):``    ` `    ``# Corner cases``    ``if` `(n <``=` `1``):``        ``return` `False``    ``if` `(n <``=` `3``):``        ``return` `True` `    ``# Check if n is a``    ``# multiple of 2 or 3``    ``if` `(n ``%` `2` `=``=` `0` `or` `n ``%` `3` `=``=` `0``):``        ``return` `False` `    ``# Above condition allows to check only``    ``# for every 6th number, starting from 5``    ``i ``=` `5``    ` `    ``while` `(i ``*` `i <``=` `n ):` `        ``# If n is a multiple of i and i + 2``        ``if` `(n ``%` `i ``=``=` `0` `or` `n ``%` `(i ``+` `2``) ``=``=` `0``):``            ``return` `False``        ` `        ``i ``=` `i ``+` `6``        ` `    ``return` `True` `# Function to find the sum of array``# elements which are prime factors of K``def` `primeFactorSum(arr, n, k):` `    ``# Stores the required sum``    ``sum` `=` `0` `    ``# Traverse the given array``    ``for` `i ``in` `range``(n):` `        ``# If current element is a prime``        ``# factor of k, add it to the sum``        ``if` `(k ``%` `arr[i] ``=``=` `0` `and` `isPrime(arr[i])):``            ``sum` `=` `sum` `+` `arr[i]``        ` `    ``# Print the result``    ``print``(``sum``)` `# Driver Code` `# Given arr[]``arr ``=` `[ ``1``, ``2``, ``3``, ``5``, ``6``, ``7``, ``15` `]` `# Store the size of the array``N ``=` `len``(arr)` `K ``=` `35` `primeFactorSum(arr, N, K)` `# This code is contributed by code_hunt`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG``{` `    ``// Function to check if a``    ``// number is prime or not``    ``static` `bool` `isPrime(``int` `n)``    ``{``      ` `        ``// Corner cases``        ``if` `(n <= 1)``            ``return` `false``;``        ``if` `(n <= 3)``            ``return` `true``;` `        ``// Check if n is a``        ``// multiple of 2 or 3``        ``if` `(n % 2 == 0 || n % 3 == 0)``            ``return` `false``;` `        ``// Above condition allows to check only``        ``// for every 6th number, starting from 5``        ``for` `(``int` `i = 5; i * i <= n; i = i + 6)` `            ``// If n is a multiple of i and i + 2``            ``if` `(n % i == 0 || n % (i + 2) == 0)``                ``return` `false``;` `        ``return` `true``;``    ``}` `    ``// Function to find the sum of array``    ``// elements which are prime factors of K``    ``static` `void` `primeFactorSum(``int` `[]arr, ``int` `n, ``int` `k)``    ``{` `        ``// Stores the required sum``        ``int` `sum = 0;` `        ``// Traverse the given array``        ``for` `(``int` `i = 0; i < n; i++) {` `            ``// If current element is a prime``            ``// factor of k, add it to the sum``            ``if` `(k % arr[i] == 0 && isPrime(arr[i]))``            ``{``                ``sum = sum + arr[i];``            ``}``        ``}` `        ``// Print the result``        ``Console.Write(sum);``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(``string``[] args)``    ``{` `        ``// Given arr[]``        ``int` `[]arr = { 1, 2, 3, 5, 6, 7, 15 };` `        ``// Store the size of the array``        ``int` `N = arr.Length;``        ``int` `K = 35;``        ``primeFactorSum(arr, N, K);``    ``}``}` `// This code is contributed by ukasp.`
Output:
`12`

Time Complexity: O(N*√X), where X is the largest element in the array
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up