Знайдіть пари куба | Встановіть 2 (A N^(1/3) рішення)
Враховуючи число N, знайдіть дві пари, які можуть представляти число як суму двох кубів. Іншими словами, знайдіть дві пари (a b) та (c d) таким чином, що задане число n може бути виражене як
n = a^3 + b^3 = c^3 + d^3
де A B C і D - це чотири різних числа.
Приклади:
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
Ми обговорили O ( п. 2/3 ) Рішення в нижче наборі 1.
Знайдіть пари куба | Встановіть 1 (A N^(2/3) рішення)
У цій публікації O ( п. 1/3 ) обговорюється рішення.
Будь -яке число n, яке задовольняє обмеження, матиме дві чіткі пари (a b) та (c d) таким чином, що a b c і d були меншими п. 1/3 . Ідея полягає у створенні допоміжного масиву розміру п. 1/3 . Кожен індекс I в масиві зберігатиме значення, рівне кубі цього індексу, тобто Arr [i] = i^3. Тепер проблема зводиться до пошуку пари елементів у сортованому масиві, сума якої дорівнює заданому числу n. Проблема детально обговорюється ось .
Нижче наведено реалізацію вищевказаної ідеї:
// 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)
Складність часу вищевказаного розчину O (n^(1/3)).