Sum of every K’th prime number in an array
Last Updated :
12 Sep, 2022
Given an integer k and an array of integers arr (less than 10^6), the task is to find the sum of every k’th prime number in the array.
Examples:
Input: arr[] = {2, 3, 5, 7, 11}, k = 2
Output: 10
All the elements of the array are prime. So, the prime numbers after every K (i.e. 2) interval are 3, 7 and their sum is 10.
Input: arr[] = {11, 13, 15, 17, 19}, k = 2
Output: 32
Simple Approach: Traverse the array and find every K’th prime number in the array and calculate the running sum. In this way, we’ll have to check every element of the array whether it is prime or not which will take more time as the size of the array increases.
Efficient Approach: Create a sieve that will store whether a number is prime or not. Then, it can be used to check a number against prime in O(1) time. In this way, we only have to keep track of every K’th prime number and maintain the running sum.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000000
bool prime[MAX + 1];
void SieveOfEratosthenes()
{
memset (prime, true , sizeof (prime));
prime[1] = false ;
prime[0] = false ;
for ( int p = 2; p * p <= MAX; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= MAX; i += p)
prime[i] = false ;
}
}
}
void SumOfKthPrimes( int arr[], int n, int k)
{
int c = 0;
long long int sum = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
c++;
if (c % k == 0) {
sum += arr[i];
c = 0;
}
}
}
cout << sum << endl;
}
int main()
{
SieveOfEratosthenes();
int arr[] = { 2, 3, 5, 7, 11 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
SumOfKthPrimes(arr, n, k);
return 0;
}
|
Java
public class GFG {
static int MAX = 1000000 ;
static boolean prime[] = new boolean [MAX + 1 ];
static void SieveOfEratosthenes() {
for ( int i = 0 ; i < prime.length; i++) {
prime[i] = true ;
}
prime[ 1 ] = false ;
prime[ 0 ] = false ;
for ( int p = 2 ; p * p <= MAX; p++) {
if (prime[p] == true ) {
for ( int i = p * 2 ; i <= MAX; i += p) {
prime[i] = false ;
}
}
}
}
static void SumOfKthPrimes( int arr[], int n, int k) {
int c = 0 ;
long sum = 0 ;
for ( int i = 0 ; i < n; i++) {
if (prime[arr[i]]) {
c++;
if (c % k == 0 ) {
sum += arr[i];
c = 0 ;
}
}
}
System.out.println(sum);
}
public static void main(String[] args) {
SieveOfEratosthenes();
int arr[] = { 2 , 3 , 5 , 7 , 11 };
int n = arr.length;
int k = 2 ;
SumOfKthPrimes(arr, n, k);
}
}
|
Python3
MAX = 100000 ;
prime = [ True ] * ( MAX + 1 );
def SieveOfEratosthenes():
prime[ 1 ] = False ;
prime[ 0 ] = False ;
p = 2 ;
while (p * p < = MAX ):
if (prime[p]):
i = p * 2 ;
while (i < = MAX ):
prime[i] = False ;
i + = p;
p + = 1 ;
def SumOfKthPrimes(arr, n, k):
c = 0 ;
sum = 0 ;
for i in range (n):
if (prime[arr[i]]):
c + = 1 ;
if (c % k = = 0 ):
sum + = arr[i];
c = 0 ;
print ( sum );
SieveOfEratosthenes();
arr = [ 2 , 3 , 5 , 7 , 11 ];
n = len (arr);
k = 2 ;
SumOfKthPrimes(arr, n, k);
|
C#
class GFG
{
static int MAX = 1000000;
static bool [] prime = new bool [MAX + 1];
static void SieveOfEratosthenes()
{
prime[1] = false ;
prime[0] = false ;
for ( int p = 2; p * p <= MAX; p++)
{
if (prime[p] == false )
{
for ( int i = p * 2;
i <= MAX; i += p)
prime[i] = true ;
}
}
}
static void SumOfKthPrimes( int [] arr,
int n, int k)
{
int c = 0;
long sum = 0;
for ( int i = 0; i < n; i++)
{
if (!prime[arr[i]])
{
c++;
if (c % k == 0)
{
sum += arr[i];
c = 0;
}
}
}
System.Console.WriteLine(sum);
}
static void Main()
{
SieveOfEratosthenes();
int [] arr = new int [] { 2, 3, 5, 7, 11 };
int n = arr.Length;
int k = 2;
SumOfKthPrimes(arr, n, k);
}
}
|
PHP
<?php
$MAX = 100000;
$prime = array_fill (0, $MAX + 1, true);
function SieveOfEratosthenes()
{
global $MAX , $prime ;
$prime [1] = false;
$prime [0] = false;
for ( $p = 2; $p * $p <= $MAX ; $p ++)
{
if ( $prime [ $p ] == true)
{
for ( $i = $p * 2;
$i <= $MAX ; $i += $p )
$prime [ $i ] = false;
}
}
}
function SumOfKthPrimes( $arr , $n , $k )
{
global $MAX , $prime ;
$c = 0;
$sum = 0;
for ( $i = 0; $i < $n ; $i ++)
{
if ( $prime [ $arr [ $i ]])
{
$c ++;
if ( $c % $k == 0)
{
$sum += $arr [ $i ];
$c = 0;
}
}
}
echo $sum . "\n" ;
}
SieveOfEratosthenes();
$arr = array ( 2, 3, 5, 7, 11 );
$n = sizeof( $arr );
$k = 2;
SumOfKthPrimes( $arr , $n , $k );
?>
|
Javascript
<script>
let MAX = 100000;
let prime = new Array(MAX + 1).fill( true );
function SieveOfEratosthenes() {
prime[1] = false ;
prime[0] = false ;
for (let p = 2; p * p <= MAX; p++) {
if (prime[p] == true ) {
for (let i = p * 2;
i <= MAX; i += p)
prime[i] = false ;
}
}
}
function SumOfKthPrimes(arr, n, k) {
let c = 0;
let sum = 0;
for (let i = 0; i < n; i++) {
if (prime[arr[i]]) {
c++;
if (c % k == 0) {
sum += arr[i];
c = 0;
}
}
}
document.write(sum + "<br>" );
}
SieveOfEratosthenes();
let arr = new Array(2, 3, 5, 7, 11);
let n = arr.length;
let k = 2;
SumOfKthPrimes(arr, n, k);
</script>
|
Complexity Analysis:
- Time Complexity: O(n + MAX2)
- Auxiliary Space: O(MAX)
Share your thoughts in the comments
Please Login to comment...