С обзиром на број н Пронађите два пара који могу представљати број као збир две коцке. Другим речима Пронађите два пара (а б) и (ц д) тако да се дат број н може изразити као
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++ 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)).