Count of pairs in an Array whose sum is a Perfect Cube | Function to return an ArrayList containing all the perfect cubes upto n ; while current perfect cube is less than or equal to n ; Function to print the sum of maximum two elements from the array ; Function to return the count of numbers that when added with n give a perfect cube ; temp > n is checked so that pairs ( x , y ) and ( y , x ) don 't get counted twice ; Function to count the pairs whose sum is a perfect cube ; Sum of the maximum two elements from the array ; List of perfect cubes upto max ; Contains all the array elements ; Add count of the elements that when added with arr [ i ] give a perfect cube ; Driver code
function getPerfectcubes ( n ) { let perfectcubes = [ ] ; let current = 1 ; let i = 1 ; while ( current <= n ) { perfectcubes . push ( current ) ; i += 1 ; current = parseInt ( Math . pow ( i , 3 ) ) ; } return perfectcubes ; } function maxPairSum ( arr , n ) { let max = 0 ; let secondMax = 0 ; if ( arr [ 0 ] > arr [ 1 ] ) { max = arr [ 0 ] ; secondMax = arr [ 1 ] ; } else { max = arr [ 1 ] ; secondMax = arr [ 0 ] ; } for ( let i = 2 ; i < n ; i ++ ) { if ( arr [ i ] > max ) { secondMax = max ; max = arr [ i ] ; } else if ( arr [ i ] > secondMax ) secondMax = arr [ i ] ; } return ( max + secondMax ) ; } function countPairsWith ( n , perfectcubes , nums ) { let count = 0 ; let len = perfectcubes . length ; for ( let i = 0 ; i < len ; i ++ ) { let temp = perfectcubes [ i ] - n ; if ( temp > n ) { for ( let j = 0 ; j < nums . length ; j ++ ) { if ( nums [ j ] == temp ) count += 1 ; } } } return count ; } function countPairs ( arr , n ) { let max = maxPairSum ( arr , n ) ; let perfectcubes = getPerfectcubes ( max ) ; let nums = [ ] ; for ( let i = 0 ; i < n ; i ++ ) nums . push ( arr [ i ] ) ; let count = 0 ; for ( let i = 0 ; i < n ; i ++ ) { count += countPairsWith ( arr [ i ] , perfectcubes , nums ) ; } return count ; } let arr = [ 2 , 6 , 18 , 9 , 999 , 1 ] ; let n = arr . length ; document . write ( countPairs ( arr , n ) ) ;