logo

Пронађите коцке парове | Сет 2 (А Н ^ (1/3) решење)

С обзиром на број н Пронађите два пара који могу представљати број као збир две коцке. Другим речима Пронађите два пара (а б) и (ц д) тако да се дат број н може изразити као 
 

n = a^3 + b^3 = c^3 + d^3


где су Б Ц и Д четири различита броја.
Примери: 
 



  Input:   n = 1729   Output:   (1 12) and (9 10)   Explanation:    1729 = 1^3 + 12^3 = 9^3 + 10^3   Input:   n = 4104   Output:   (2 16) and (9 15)   Explanation:    4104 = 2^3 + 16^3 = 9^3 + 15^3   Input:   n = 13832   Output:   (2 24) and (18 20)   Explanation:    13832 = 2^3 + 24^3 = 18^3 + 20^3


 


Разговарали смо о О О ( н2/3 ) Решење испод сет 1.
Пронађите коцке парове | Сет 1 (А Н ^ (2/3) решење)
У овом посту А О ( н1/3 ) Раствор се расправља.
Било који број Н који задовољава ограничење ће имати два различита пара (а б) и (ц д) тако да су Б Ц и Д све мање од н1/3 . Идеја је да се створи помоћни низ величине н1/3 . Сваки индекс који сам у низу сачуват ће вредност једнаку коцки тог индекса И.Е. Арр [и] = И ^ 3. Сада проблем смањује на проналажење пар елемената у сортираном низу чија је сума једнака датом броју н. Проблем се детаљно расправља овде .
Испод је примена горе наведене идеје: 
 

C++
// C++ program to find pairs that can represent // the given number as sum of two cubes #include    #include  using namespace std; // Function to find pairs that can represent // the given number as sum of two cubes void findPairs(int n) {  // find cube root of n  int cubeRoot = pow(n 1.0 / 3.0);  // create a array of size of size 'cubeRoot'  int cube[cubeRoot + 1];  // for index i cube[i] will contain i^3  for (int i = 1; i <= cubeRoot; i++)  cube[i] = i*i*i;  // Find all pairs in above sorted  // array cube[] whose sum is equal to n  int l = 1;  int r = cubeRoot;  while (l < r)  {  if (cube[l] + cube[r] < n)  l++;  else if(cube[l] + cube[r] > n)  r--;  else {  cout << '(' << l << ' ' << r  << ')' << endl;  l++; r--;  }  } } // Driver function int main() {  int n = 20683;  findPairs(n);  return 0; } 
Java
// Java program to find pairs // that can represent the given  // number as sum of two cubes import java.io.*; class GFG  {   // Function to find pairs  // that can represent the // given number as sum of // two cubes static void findPairs(int n) {  // find cube root of n  int cubeRoot = (int)Math.pow(  n 1.0 / 3.0);  // create a array of   // size of size 'cubeRoot'  int cube[] = new int[cubeRoot + 1];  // for index i cube[i]  // will contain i^3  for (int i = 1; i <= cubeRoot; i++)  cube[i] = i * i * i;  // Find all pairs in above   // sorted array cube[]   // whose sum is equal to n  int l = 1;  int r = cubeRoot;  while (l < r)  {  if (cube[l] + cube[r] < n)  l++;  else if(cube[l] + cube[r] > n)  r--;  else {  System.out.println('(' + l +   ' ' + r +  ')' );  l++; r--;  }  } } // Driver Code public static void main (String[] args) { int n = 20683; findPairs(n); } } // This code is contributed by anuj_67. 
Python3
# Python3 program to find pairs that # can represent the given number  # as sum of two cubes import math # Function to find pairs that can # represent the given number as  # sum of two cubes def findPairs( n): # find cube root of n cubeRoot = int(math.pow(n 1.0 / 3.0)); # create a array of  # size of size 'cubeRoot' cube = [0] * (cubeRoot + 1); # for index i cube[i]  # will contain i^3 for i in range(1 cubeRoot + 1): cube[i] = i * i * i; # Find all pairs in above sorted # array cube[] whose sum  # is equal to n l = 1; r = cubeRoot; while (l < r): if (cube[l] + cube[r] < n): l += 1; else if(cube[l] + cube[r] > n): r -= 1; else: print('('  l  ' '  math.floor(r) ')' end = ''); print(); l += 1; r -= 1; # Driver code n = 20683; findPairs(n); # This code is contributed by mits 
C#
// C# program to find pairs // that can represent the given  // number as sum of two cubes using System; class GFG  {   // Function to find pairs  // that can represent the // given number as sum of // two cubes static void findPairs(int n) {  // find cube root of n  int cubeRoot = (int)Math.Pow(n 1.0 /   3.0);  // create a array of   // size of size 'cubeRoot'  int []cube = new int[cubeRoot + 1];  // for index i cube[i]  // will contain i^3  for (int i = 1; i <= cubeRoot; i++)  cube[i] = i * i * i;  // Find all pairs in above   // sorted array cube[]   // whose sum is equal to n  int l = 1;  int r = cubeRoot;  while (l < r)  {  if (cube[l] + cube[r] < n)  l++;  else if(cube[l] + cube[r] > n)  r--;  else {  Console.WriteLine('(' + l +   ' ' + r +  ')' );  l++; r--;  }  } } // Driver Code public static void Main () {  int n = 20683;  findPairs(n); } } // This code is contributed by anuj_67. 
PHP
 // PHP program to find pairs // that can represent the  // given number as sum of  // two cubes // Function to find pairs // that can represent the // given number as sum of  // two cubes function findPairs( $n) { // find cube root of n $cubeRoot = pow($n 1.0 / 3.0); // create a array of  // size of size 'cubeRoot' $cube = array(); // for index i cube[i]  // will contain i^3 for ($i = 1; $i <= $cubeRoot; $i++) $cube[$i] = $i * $i * $i; // Find all pairs in above sorted // array cube[] whose sum  // is equal to n $l = 1; $r = $cubeRoot; while ($l < $r) { if ($cube[$l] + $cube[$r] <$n) $l++; else if($cube[$l] + $cube[$r] > $n) $r--; else { echo '('  $l  ' '  floor($r)  ')' ; echo 'n'; $l++;$r--; } } } // Driver code $n = 20683; findPairs($n); // This code is contributed by anuj_67. ?> 
JavaScript
<script> // Javascript program to find pairs // that can represent the given  // number as sum of two cubes // Function to find pairs  // that can represent the // given number as sum of // two cubes function findPairs(n) {  // find cube root of n  var cubeRoot = parseInt(Math.pow(  n 1.0 / 3.0));  // create a array of   // size of size 'cubeRoot'  var cube = Array.from({length: cubeRoot + 1} (_ i) => 0);  // for index i cube[i]  // will contain i^3  for (i = 1; i <= cubeRoot; i++)  cube[i] = i * i * i;  // Find all pairs in above   // sorted array cube   // whose sum is equal to n  var l = 1;  var r = cubeRoot;  while (l < r)  {  if (cube[l] + cube[r] < n)  l++;  else if(cube[l] + cube[r] > n)  r--;  else {  document.write('(' + l +   ' ' + r +  ')  
'
); l++; r--; } } } // Driver Code var n = 20683; findPairs(n); // This code is contributed by Amit Katiyar </script>

Излаз:  



(10 27) (19 24)


Сложеност времена горњег раствора је О (Н ^ (1/3)).