Check if a number can be represented as sum of two positive perfect biquadrates

• Difficulty Level : Medium
• Last Updated : 08 Nov, 2021

Given a positive integer N, the task is to check if N can be written as the sum of two perfect biquadrates or not i.e., (N = X4 + Y4), where X and Y are non-negative integers. If it is possible, then print Yes. Otherwise, print No.

Examples:

Input: N = 97
Output: Yes
Explanation: Summation of the biquadrates of 2 and 3 is 97, i.e. 24 + 34 = 16 + 81 = 97(= N).

Input: N = 7857
Output: Yes

Naïve Approach: The simplest approach to solve the given problem is to consider all possible combinations of integers X and Y and check if the sum of their biquadrates equals N or not. If found to be true, then print Yes. Otherwise, print No.

Time Complexity: O(sqrt(N))
Auxiliary Space: O(1)

Efficient Approach: The above approach can also be optimized by using the two-pointer approach, the idea is to find the two numbers over the range . Follow the below step to solve this problem:

• Initialize two pointers, say i as 0 and j as .
• Iterate a loop until j becomes less than i, and perform the following steps:
• If the value of j4 is N and i4 is N, then print Yes.
• If the value of (i4 + i4) or (j4 + j4) or (i4 + j4) is N, then print Yes.
• If the value of (i4 + j4) is less than N, then increment the pointer i by 1. Otherwise, decrement the pointer j by 1.
• After completing the above steps, if the loops terminate, then print No as there exists no such pairs satisfying the given criteria.

Below is the implementation of the above approach:

C++

 // C++ program for the above approach #include using namespace std; // Function to check if the given number// N can be expressed as the sum of two// biquadrates or notstring sumOfTwoBiquadrates(int N){    // Base Case    if (N == 0)        return "Yes";     // Find the range to traverse    int j = floor(sqrt(sqrt(N)));    int i = 1;     while (i <= j) {         // If x & y exists        if (j * j * j * j == N)            return "Yes";        if (i * i * i * i == N)            return "Yes";        if (i * i * i * i                + j * j * j * j            == N)            return "Yes";         // If sum of powers of i and j        // of 4 is less than N, then        // increment the value of i        if (i * i * i * i                + j * j * j * j            < N)            i++;         // Otherwise, decrement the        // value of j        else            j--;    }     // If no such pairs exist    return "No";} // Driver Codeint main(){    int N = 7857;    cout << sumOfTwoBiquadrates(N);     return 0;}

Java

 // Java program for the above approachpublic class GFG{   // Function to check if the given number// N can be expressed as the sum of two// biquadrates or notstatic String sumOfTwoBiquadrates(int N){       // Base Case    if (N == 0)        return "Yes";     // Find the range to traverse    int j = (int)Math.floor((double)(Math.sqrt((int)(Math.sqrt(N)))));      int i = 1;     while (i <= j) {         // If x & y exists        if (j * j * j * j == N)            return "Yes";        if (i * i * i * i == N)            return "Yes";        if (i * i * i * i                + j * j * j * j            == N)            return "Yes";         // If sum of powers of i and j        // of 4 is less than N, then        // increment the value of i        if (i * i * i * i                + j * j * j * j            < N)            i++;         // Otherwise, decrement the        // value of j        else            j--;    }     // If no such pairs exist    return "No";} // Driver Codepublic static void main(String []args){    int N = 7857;    System.out.println(sumOfTwoBiquadrates(N));    }} // This code is contributed by AnkThon

Python3

 # python program for the above approachimport math # Function to check if the given number# N can be expressed as the sum of two# biquadrates or notdef sumOfTwoBiquadrates(N):     # Base Case    if (N == 0):        return "Yes"     # Find the range to traverse    j = int(math.sqrt(math.sqrt(N)))    i = 1     while (i <= j):         # If x & y exists        if (j * j * j * j == N):            return "Yes"        if (i * i * i * i == N):            return "Yes"        if (i * i * i * i + j * j * j * j == N):            return "Yes"         # If sum of powers of i and j        # of 4 is less than N, then        # increment the value of i        if (i * i * i * i + j * j * j * j < N):            i += 1         # Otherwise, decrement the        # value of j        else:            j -= 1     # If no such pairs exist    return "No" # Driver Codeif __name__ == "__main__":     N = 7857    print(sumOfTwoBiquadrates(N)) # This code is contributed by rakeshsahni

C#

 // C# program for the above approachusing System;class GFG{   // Function to check if the given number// N can be expressed as the sum of two// biquadrates or notstatic string sumOfTwoBiquadrates(int N){       // Base Case    if (N == 0)        return "Yes";     // Find the range to traverse    int j = (int)Math.Floor((double)(Math.Sqrt((int)(Math.Sqrt(N)))));      int i = 1;     while (i <= j) {         // If x & y exists        if (j * j * j * j == N)            return "Yes";        if (i * i * i * i == N)            return "Yes";        if (i * i * i * i                + j * j * j * j            == N)            return "Yes";         // If sum of powers of i and j        // of 4 is less than N, then        // increment the value of i        if (i * i * i * i                + j * j * j * j            < N)            i++;         // Otherwise, decrement the        // value of j        else            j--;    }     // If no such pairs exist    return "No";} // Driver Codepublic static void Main(){    int N = 7857;    Console.WriteLine(sumOfTwoBiquadrates(N));    }} // This code is contributed by ukasp.

Javascript



Output:
Yes

Time Complexity: Auxiliary Space: O(1)

My Personal Notes arrow_drop_up