Sum of absolute differences of pairs from the given array that satisfy the given condition
Given an array arr[] of N elements, the task is to find the sum of absolute differences between all pairs (arr[i], arr[j]) such that i < j and (j – i) is prime.
Example:
Input: arr[] = {1, 2, 3, 5, 7, 12}
Output: 45
All valid index pairs are:
(5, 0) -> abs(12 – 1) = 11
(3, 0) -> abs(5 – 1) = 4
(2, 0) -> abs(3 – 1) = 2
(4, 1) -> abs(7 – 2) = 5
(3, 1) -> abs(5 – 2) = 3
(5, 2) -> abs(12 – 3) = 9
(4, 2) -> abs(7 – 3) = 4
(5, 3) -> abs(12 – 5) = 7
11 + 4 + 2 + 5 + 3 + 9 + 4 + 7 = 45
Input: arr[] = {2, 5, 6, 7}
Output: 11
Approach: Initialise sum = 0 and run two nested loops and for every pair arr[i], arr[j] is (j – i) is prime then update the sum as sum = sum + abs(arr[i], arr[j]). Print the sum in the end.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
bool isPrime( int n)
{
if (n <= 1)
return false ;
for ( int i = 2; i < n; i++)
if (n % i == 0)
return false ;
return true ;
}
int findSum( int arr[], int n)
{
int sum = 0;
for ( int i = 0; i < n - 1; i++) {
for ( int j = i + 1; j < n; j++)
if (isPrime(j - i)) {
sum = sum + abs (arr[i] - arr[j]);
}
}
return sum;
}
int main()
{
int arr[] = { 1, 2, 3, 5, 7, 12 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << findSum(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static boolean isPrime( int n)
{
if (n <= 1 )
{
return false ;
}
for ( int i = 2 ; i < n; i++)
{
if (n % i == 0 )
{
return false ;
}
}
return true ;
}
static int findSum( int arr[], int n)
{
int sum = 0 ;
for ( int i = 0 ; i < n - 1 ; i++)
{
for ( int j = i + 1 ; j < n; j++)
{
if (isPrime(j - i))
{
sum = sum + Math.abs(arr[i] - arr[j]);
}
}
}
return sum;
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 , 5 , 7 , 12 };
int n = arr.length;
System.out.println(findSum(arr, n));
}
}
|
Python3
def isPrime(n) :
if (n < = 1 ) :
return False ;
for i in range ( 2 , n) :
if (n % i = = 0 ) :
return False ;
return True ;
def findSum(arr, n) :
sum = 0 ;
for i in range (n - 1 ) :
for j in range (i + 1 , n) :
if (isPrime(j - i)) :
sum = sum + abs (arr[i] - arr[j]);
return sum ;
if __name__ = = "__main__" :
arr = [ 1 , 2 , 3 , 5 , 7 , 12 ];
n = len (arr);
print (findSum(arr, n));
|
C#
using System;
class GFG
{
static bool isPrime( int n)
{
if (n <= 1)
{
return false ;
}
for ( int i = 2; i < n; i++)
{
if (n % i == 0)
{
return false ;
}
}
return true ;
}
static int findSum( int []arr, int n)
{
int sum = 0;
for ( int i = 0; i < n - 1; i++)
{
for ( int j = i + 1; j < n; j++)
{
if (isPrime(j - i))
{
sum = sum + Math.Abs(arr[i] - arr[j]);
}
}
}
return sum;
}
public static void Main(String[] args)
{
int []arr = {1, 2, 3, 5, 7, 12};
int n = arr.Length;
Console.WriteLine(findSum(arr, n));
}
}
|
Javascript
<script>
function isPrime(n)
{
if (n <= 1)
return false ;
for (let i = 2; i < n; i++)
if (n % i == 0)
return false ;
return true ;
}
function findSum( arr, n)
{
let sum = 0;
for (let i = 0; i < n - 1; i++) {
for (let j = i + 1; j < n; j++)
if (isPrime(j - i)) {
sum = sum + Math.abs(arr[i] - arr[j]);
}
}
return sum;
}
let arr = [ 1, 2, 3, 5, 7, 12 ];
let n = arr.length;
document.write(findSum(arr, n));
</script>
|
Time Complexity: O(N3)
Auxiliary Space: O(1)
Last Updated :
18 Nov, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...