Skip to content
Related Articles

Related Articles

Improve Article

Euler’s Four Square Identity

  • Last Updated : 05 May, 2021

According to Euler’s four square identity, the product of any two numbers a and b can be expressed as a sum of four squares if a and b both can individually be expressed as the sum of four squares.
Mathematically, if a = c1^2 + c2^2 + c3^2 + c4^2    and b = d1^2 + d2^2 + d3^2 + d4^2
Then, a * b = e1^2 + e2^2 + e3^2 + e4^2
where c1, c2, c3, c4, d1, d2, d3, d4, e1, e2, e3, e4 are any integer.
 

Some examples are,

a = 1^2 + 2^2 + 3^2 + 4^2 = 30
b = 1^2 + 1^2 + 1^2 + 1^2 = 4
ab = a * b = 120 = 2^2 + 4^2 + 6^2 + 8^2
a = 1^2 + 2^2 + 3^2 + 1^2 = 15
b = 2^2 + 3^2 + 4^2 + 5^2 = 24
ab = a * b = 810 = 1^2 + 4^2 + 8^2 + 27^2
a = 1^2 + 2^2 + 3^2 + 1^2 = 15
b = 2^2 + 3^2 + 2^2 + 3^2 = 26
ab = a * b = 390 = 4^2 + 7^2 + 10^2 + 15^2

Example: 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: a = 1 * 1 + 2 * 2 + 3 * 3 + 4 * 4
       b = 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1
  
Output: i = 0
j = 2
k = 4
l = 10
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 0 * 0 + 2 * 2 + 4 * 4 + 10 * 10

i = 2
j = 4
k = 6
l = 8
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 2 * 2 + 4 * 4 + 6 * 6 + 8 * 8

Explanation : 
The product of the 2 numbers a(30) and b(4) can be represented as the sum of 4 squares as stated by Euler’s four square identity. The above are the 2 representations of the product a * b in the sum of 4 squares form. All possible representations of the product a*b in the sum of four squares form are shown. 

Input: a = 1*1 + 2*2 + 3*3 + 1*1
       b = 1*1 + 2*2 + 1*1 + 1*1

Output: i = 0
j = 1
k = 2
l = 10
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 0*0 + 1*1 + 2*2 + 10*10

i = 0
j = 4
k = 5
l = 8
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 0*0 + 4*4 + 5*5 + 8*8

i = 1
j = 2
k = 6
l = 8
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 1*1 + 2*2 + 6*6 + 8*8

i = 2
j = 2
k = 4
l = 9
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 2*2 + 2*2 + 4*4 + 9*9

i = 2
j = 4
k = 6
l = 7
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 2*2 + 4*4 + 6*6 + 7*7

i = 3
j = 4
k = 4
l = 8
Product of 15 and 7 can be written as sum of squares of i, j, k, l
105 = 3*3 + 4*4 + 4*4 + 8*8

Approach : 
Brute Force : 
A given number(a*b) can be represented in a sum of 4 squares form by using 4 loops i, j, k, l to find each of the four squares. This gives all possible combinations to form a*b as a sum of four squares. At each iteration of the innermost loop(l loop), check the sum with the product a*b. If there is a match, then print the 4 numbers(i, j, k, and l) whose sum of squares equals a*b. 
 



C++




// CPP code to verify euler's four square identity
#include <bits/stdc++.h>
 
using namespace std;
 
#define show(x) cout << #x << " = " << x << "\n";
 
// function to check euler four square identity
void check_euler_four_square_identity(int a, int b,
                                      int ab)
{
    int s = 0;
     
    // loops checking the sum of squares
    for (int i = 0;i * i <= ab;i ++)
    {
        s = i * i;
        for (int j = i;j * j <= ab;j ++)
        {
            // sum of 2 squares
            s = j * j + i * i;
             
            for (int k = j;k * k <= ab;k ++)
            {
                // sum of 3 squares
                s = k * k + j * j + i * i;
                 
                for (int l = k;l * l <= ab;l ++)
                {
                    // sum of 4 squares
                    s = l * l + k * k + j * j + i * i;
 
                    // product of 2 numbers represented
                    // as sum of four squares i, j, k, l
                    if (s == ab)
                    {
                        // product of 2 numbers a and b
                        // represented as sum of four
                        // squares i, j, k, l
                        show(i);
                        show(j);
                        show(k);
                        show(l);
                        cout <<""
                        << "Product of " << a
                        << " and " << b;
                        cout << " can be written"<<
                        " as sum of squares of i, "<<
                         "j, k, l\n";
                        cout << ab << " = ";
                        cout << i << "*" << i << " + ";
                        cout << j << "*" << j << " + ";
                        cout << k << "*" << k << " + ";
                        cout << l << "*" << l << "\n";
                        cout << "\n";
                    }
                }
            }
        }
    }
}
 
// Driver code
int main()
{
    // a and b such that they can be expressed
    // as sum of squares of numbers
    int a = 30; // 1*1 + 2*2 + 3*3 + 4*4;
    int b = 4;  // 1*1 + 1*1 + 1*1 + 1*1;
 
    // given numbers can be represented as
    // sum of 4 squares By euler's four
    // square identity product also can be
    // represented as sum of 4 squares
    int ab = a * b;
     
    check_euler_four_square_identity(a, b, ab);
     
    return 0;
}

Java




// Java code to verify euler's
// four square identity
import java.io.*;
 
class GFG
{
     
// function to check euler
// four square identity
static void check_euler_four_square_identity(int a,
                                             int b,
                                             int ab)
{
    int s = 0;
     
    // loops checking the
    // sum of squares
    for (int i = 0;
             i * i <= ab; i ++)
    {
        s = i * i;
        for (int j = i;
                 j * j <= ab; j ++)
        {
            // sum of 2 squares
            s = j * j + i * i;
             
            for (int k = j;
                     k * k <= ab; k ++)
            {
                // sum of 3 squares
                s = k * k + j *
                    j + i * i;
                 
                for (int l = k;
                         l * l <= ab; l ++)
                {
                    // sum of 4 squares
                    s = l * l + k * k +
                        j * j + i * i;
 
                    // product of 2 numbers
                    // represented as sum of
                    // four squares i, j, k, l
                    if (s == ab)
                    {
                        // product of 2 numbers
                        // a and b represented
                        // as sum of four squares
                        // i, j, k, l
                        System.out.print("i = " +
                                          i + "\n");
                        System.out.print("j = " +
                                          j + "\n");
                        System.out.print("k = " +
                                          k + "\n");
                        System.out.print("l = " +
                                          l + "\n");
                        System.out.print("Product of " +
                                         a + " and " + b);
                        System.out.print(" can be written"+
                               " as sum of squares of i, "+
                                              "j, k, l\n");
                        System.out.print(ab + " = ");
                        System.out.print(i + "*" +
                                         i + " + ");
                        System.out.print(j + "*" +
                                         j + " + ");
                        System.out.print(k + "*" +
                                         k + " + ");
                        System.out.print(l + "*" +
                                         l + "\n");
                        System.out.println();
                    }
                }
            }
        }
    }
}
 
// Driver code
public static void main (String[] args)
{
    // a and b such that
    // they can be expressed
    // as sum of squares
    // of numbers
    int a = 30; // 1*1 + 2*2 +
                // 3*3 + 4*4;
    int b = 4// 1*1 + 1*1 +
                // 1*1 + 1*1;
 
    // given numbers can be
    // represented as sum of
    // 4 squares By euler's
    // four square identity
    // product also can be
    // represented as sum
    // of 4 squares
    int ab = a * b;
     
    check_euler_four_square_identity(a, b, ab);
}
}
 
// This code is contributed by ajit

Python3




# Python3 code to verify euler's
# four square identity
 
# function to check euler
# four square identity
def check_euler_four_square_identity(a, b, ab):
 
    s = 0;
     
    # loops checking the sum of squares
    i = 0;
    while (i * i <= ab):
     
        s = i * i;
        j = i;
        while (j * j <= ab):
             
            # sum of 2 squares
            s = j * j + i * i;
            k = j;
            while (k * k <= ab):
                 
                # sum of 3 squares
                s = k * k + j * j + i * i;
                l = k;
                while (l * l <= ab):
                     
                    # sum of 4 squares
                    s = l * l + k * k + j * j + i * i;
 
                    # product of 2 numbers represented
                    # as sum of four squares i, j, k, l
                    if (s == ab):
                         
                        # product of 2 numbers a and b
                        # represented as sum of four
                        # squares i, j, k, l
                        print("i =", i);
                        print("j =", j);
                        print("k =", k);
                        print("l =", l);
                        print("Product of ", a,
                              "and", b, end = "");
                        print(" can be written as sum of",
                                  "squares of i, j, k, l");
                        print(ab, "= ", end = "");
                        print(i, "*", i, "+ ", end = "");
                        print(j, "*", j, "+ ", end = "");
                        print(k, "*", k, "+ ", end = "");
                        print(l, "*", l);
                        print("");
                    l += 1;
                k += 1;
            j += 1;
        i += 1;
 
# Driver code
 
# a and b such that they can be expressed
# as sum of squares of numbers
a = 30; # 1*1 + 2*2 + 3*3 + 4*4;
b = 4; # 1*1 + 1*1 + 1*1 + 1*1;
 
# given numbers can be represented as
# sum of 4 squares By euler's four
# square identity product also can be
# represented as sum of 4 squares
ab = a * b;
 
check_euler_four_square_identity(a, b, ab);
 
# This code is contributed
# by mits

C#




// C# code to verify euler's
// four square identity
using System;
 
class GFG
{
    // function to check euler
    // four square identity
    static void check_euler_four_square_identity(int a,
                                                 int b,
                                                 int ab)
    {
        int s = 0;
         
        // loops checking the
        // sum of squares
        for (int i = 0; i * i <= ab; i ++)
        {
            s = i * i;
            for (int j = i; j * j <= ab; j ++)
            {
                // sum of 2 squares
                s = j * j + i * i;
                 
                for (int k = j; k * k <= ab; k ++)
                {
                    // sum of 3 squares
                    s = k * k + j *
                        j + i * i;
                     
                    for (int l = k; l * l <= ab; l ++)
                    {
                        // sum of 4 squares
                        s = l * l + k * k +
                            j * j + i * i;
     
                        // product of 2 numbers
                        // represented as sum of
                        // four squares i, j, k, l
                        if (s == ab)
                        {
                            // product of 2 numbers a
                            // and b represented as 
                            // sum of four squares i, j, k, l
                            Console.Write("i = " + i + "\n");
                            Console.Write("j = " + j + "\n");
                            Console.Write("k = " + k + "\n");
                            Console.Write("l = " + l + "\n");
                            Console.Write("Product of " + a +
                                                " and " + b);
                            Console.Write(" can be written"+
                                " as sum of squares of i, "+
                                               "j, k, l\n");
                            Console.Write(ab + " = ");
                            Console.Write(i + "*" + i + " + ");
                            Console.Write(j + "*" + j + " + ");
                            Console.Write(k + "*" + k + " + ");
                            Console.Write(l + "*" + l + "\n");
                            Console.Write("\n");
                        }
                    }
                }
            }
        }
    }
     
    // Driver code
    static void Main()
    {
        // a and b such that
        // they can be expressed
        // as sum of squares of numbers
        int a = 30; // 1*1 + 2*2 + 3*3 + 4*4;
        int b = 4; // 1*1 + 1*1 + 1*1 + 1*1;
     
        // given numbers can be
        // represented as sum of
        // 4 squares By euler's
        // four square identity
        // product also can be
        // represented as sum
        // of 4 squares
        int ab = a * b;
         
        check_euler_four_square_identity(a, b, ab);
    }
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)

PHP




<?php
// PHP code to verify euler's
// four square identity
 
// function to check euler
// four square identity
function check_euler_four_square_identity($a, $b, $ab)
{
    $s = 0;
     
    // loops checking the sum of squares
    for ($i = 0; $i * $i <= $ab; $i ++)
    {
        $s = $i * $i;
        for ($j = $i; $j * $j <= $ab; $j ++)
        {
            // sum of 2 squares
            $s = $j * $j + $i * $i;
             
            for ($k = $j; $k * $k <= $ab; $k ++)
            {
                // sum of 3 squares
                $s = $k * $k + $j * $j + $i * $i;
                 
                for ($l = $k; $l * $l <= $ab; $l ++)
                {
                    // sum of 4 squares
                    $s = $l * $l + $k * $k +
                         $j * $j + $i * $i;
 
                    // product of 2 numbers represented
                    // as sum of four squares i, j, k, l
                    if ($s == $ab)
                    {
                        // product of 2 numbers a and b
                        // represented as sum of four
                        // squares i, j, k, l
                        echo("i = " . $i . "\n");
                        echo("j = " . $j . "\n");
                        echo("k = " . $k . "\n");
                        echo("l = " . $l . "\n");
                        echo "". "Product of " .
                            $a . " and " . $b;
                        echo " can be written".
                             " as sum of squares of i, " .
                                              "j, k, l\n";
                        echo $ab . " = ";
                        echo $i . "*" . $i. " + ";
                        echo $j . "*" . $j . " + ";
                        echo $k . "*" . $k . " + ";
                        echo $l . "*" . $l . "\n";
                        echo "\n";
                    }
                }
            }
        }
    }
}
 
// Driver code
 
// a and b such that they can be expressed
// as sum of squares of numbers
$a = 30; // 1*1 + 2*2 + 3*3 + 4*4;
$b = 4; // 1*1 + 1*1 + 1*1 + 1*1;
 
// given numbers can be represented as
// sum of 4 squares By euler's four
// square identity product also can be
// represented as sum of 4 squares
$ab = $a * $b;
 
check_euler_four_square_identity($a, $b, $ab);
 
// This code is contributed
// by Abby_akku
?>

Javascript




<script>
 
    // Javascript code to verify euler's
    // four square identity
     
    // function to check euler
    // four square identity
    function check_euler_four_square_identity(a, b, ab)
    {
        let s = 0;
           
        // loops checking the
        // sum of squares
        for (let i = 0; i * i <= ab; i ++)
        {
            s = i * i;
            for (let j = i; j * j <= ab; j ++)
            {
                // sum of 2 squares
                s = j * j + i * i;
                   
                for (let k = j; k * k <= ab; k ++)
                {
                    // sum of 3 squares
                    s = k * k + j *
                        j + i * i;
                       
                    for (let l = k; l * l <= ab; l ++)
                    {
                        // sum of 4 squares
                        s = l * l + k * k +
                            j * j + i * i;
       
                        // product of 2 numbers
                        // represented as sum of
                        // four squares i, j, k, l
                        if (s == ab)
                        {
                            // product of 2 numbers a
                            // and b represented as 
                            // sum of four squares
                            // i, j, k, l
                            document.write("i = " + i +
                            "</br>");
                            document.write("j = " + j +
                            "</br>");
                            document.write("k = " + k +
                            "</br>");
                            document.write("l = " + l +
                            "</br>");
                            document.write("Product of " + a +
                                                " and " + b);
                            document.write(" can be written"+
                                " as sum of squares of i, "+
                                               "j, k, l" +
                                               "</br>");
                            document.write(ab + " = ");
                            document.write(i + "*" + i +
                            " + ");
                            document.write(j + "*" + j +
                            " + ");
                            document.write(k + "*" + k +
                            " + ");
                            document.write(l + "*" + l +
                            "</br>");
                            document.write("</br>");
                        }
                    }
                }
            }
        }
    }
     
    // a and b such that
    // they can be expressed
    // as sum of squares of numbers
    let a = 30; // 1*1 + 2*2 + 3*3 + 4*4;
    let b = 4; // 1*1 + 1*1 + 1*1 + 1*1;
 
    // given numbers can be
    // represented as sum of
    // 4 squares By euler's
    // four square identity
    // product also can be
    // represented as sum
    // of 4 squares
    let ab = a * b;
 
    check_euler_four_square_identity(a, b, ab);
     
</script>
Output: 
i = 0
j = 2
k = 4
l = 10
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 0*0 + 2*2 + 4*4 + 10*10

i = 2
j = 4
k = 6
l = 8
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 2*2 + 4*4 + 6*6 + 8*8

 

Improved Algorithm:
The time complexity of the above algorithm is O((a*b)^4)    in the worst case. This can be reduced to O((a*b)^3) by subtracting the squares of i, j, and k from the product a*b for all (i, j, k) and checking if that value is a perfect square or not. If it is a perfect square, then we have found the solution. 
 

C++




// CPP code to verify Euler's four-square identity
#include<bits/stdc++.h>
using namespace std;
 
// This function prints the four numbers
// if a solution is found Else prints
// solution doesn't exist
void checkEulerFourSquareIdentity(int a, int b)
{
    // Number for which we want to
    // find a solution
    int ab = a * b;
    bool flag = false;
     
    int i = 0;
    while(i * i <= ab) // loop for first number
    {
        int j = i;
        while (i * i + j * j <= ab) // loop for second number
        {
            int k = j;
            while(i * i + j * j +
                k * k <= ab) // loop for third number
            {
                // Calculate the fourth number
                // and apply square root
                double l = sqrt(ab - (i * i + j *
                                        j + k * k));
                 
                // Check if the fourthNum is Integer or
                // not. If yes, then solution is found
                if (floor(l) == ceil(l) && l >= k)
                {
                    flag = true;
                    cout<<"i = " << i << "\n";
                    cout<<"j = " << j << "\n";
                    cout<<"k = " << k << "\n";
                    cout<<"l = " << (int)l << "\n";
                    cout<<"Product of " << a << " and "<< b <<
                                " can be written as sum of squares"<<
                                                " of i, j, k, l \n";
                                                 
                    cout<<ab + " = " << i << "*" << i << " + " <<
                                        j << "*" << j<< " + " << k << "*" <<
                                            k << " + " << (int)l << "*" <<
                                                        (int)l << "\n";
                     
                }
                k += 1;
            }
            j += 1;
        }
        i += 1;
    }
     
    // Solution cannot be found
    if (flag == false)
    {
        cout<< "Solution doesn't exist!\n";
        return ;
    }
}
 
// Driver Code
int main()
{
    int a = 30;
    int b = 4;
    checkEulerFourSquareIdentity(a, b);
    return 0;
}
 
// This code is contributed by mits

Java




// Java code to verify Euler's four-square identity
class GFG
{
     
// This function prints the four numbers
// if a solution is found Else prints
// solution doesn't exist
public static void checkEulerFourSquareIdentity(int a,
                                                int b)
{
    // Number for which we want to
    // find a solution
    int ab = a * b;
    boolean flag = false;
     
    int i = 0;
    while(i * i <= ab) // loop for first number
    {
        int j = i;
        while (i * i + j * j <= ab) // loop for second number
        {
            int k = j;
            while(i * i + j * j +
                  k * k <= ab) // loop for third number
            {
                // Calculate the fourth number
                // and apply square root
                double l = Math.sqrt(ab - (i * i + j *
                                           j + k * k));
                 
                // Check if the fourthNum is Integer or
                // not. If yes, then solution is found
                if (Math.floor(l) == Math.ceil(l) && l >= k)
                {
                    flag = true;
                    System.out.print("i = "  + i + "\n");
                    System.out.print("j = " + j + "\n");
                    System.out.print("k = " + k + "\n");
                    System.out.print("l = " + (int)l + "\n");
                    System.out.print("Product of " + a + " and "+ b +
                                 " can be written as sum of squares"+
                                                " of i, j, k, l \n");
                                                 
                    System.out.print(ab + " = " + i + "*" + i + " + " +
                                        j + "*" + j + " + " + k + "*" +
                                             k + " + " + (int)l + "*" +
                                                        (int)l + "\n");
                     
                }
                k += 1;
            }
            j += 1;
        }
        i += 1;
    }
     
    // Solution cannot be found
    if (flag == false)
    {
        System.out.println("Solution doesn't exist!");
        return ;
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int a = 30;
    int b = 4;
    checkEulerFourSquareIdentity(a, b);
}
}
 
// This code is contributed by mits

Python3




# Python3 code to verify Euler's four-square identity
# This function prints the four numbers if a solution is found
# Else prints solution doesn't exist
def checkEulerFourSquareIdentity(a, b):
 
    # Number for which we want to find a solution
    ab = a*b
    flag = False
     
    i = 0
    while i*i <= ab: # loop for first number
         
        j = i
        while i*i + j*j <= ab: # loop for second number
         
            k = j
            while i*i + j*j + k*k <= ab: # loop for third number
                 
                # Calculate the fourth number and apply square root
                l = (ab - (i*i + j*j + k*k))**(0.5)
                 
                # Check if the fourthNum is Integer or not
                # If yes, then solution is found
                if l == int(l) and l >= k:
                    flag = True
                    print("i = ",i)
                    print("j = ",j)
                    print("k = ",k)
                    print("l = ",l)
                    print("Product of", a , "and" , b ,
                          "can be written as sum of squares of i, j, k, l" )
                    print(ab," = ",i,"*",i,"+",j,"*",j,"+",
                          k,"*",k,"+",l,"*",l)
                     
                     
                k += 1
             
            j += 1
         
        i += 1
         
    # Solution cannot be found
    if flag == False:
        print("Solution doesn't exist!")
        return
 
a, b = 30, 4
checkEulerFourSquareIdentity(a,b)

C#




// C# code to verify Euler's four-square identity
using System;
 
class GFG
{
     
// This function prints the four numbers
// if a solution is found Else prints
// solution doesn't exist
public static void checkEulerFourSquareIdentity(int a,
                                                int b)
{
    // Number for which we want to
    // find a solution
    int ab = a * b;
    bool flag = false;
     
    int i = 0;
    while(i * i <= ab) // loop for first number
    {
        int j = i;
        while (i * i + j * j <= ab) // loop for second number
        {
            int k = j;
            while(i * i + j * j +
                  k * k <= ab) // loop for third number
            {
                // Calculate the fourth number
                // and apply square root
                double l = Math.Sqrt(ab - (i * i + j *
                                           j + k * k));
                 
                // Check if the fourthNum is Integer or
                // not. If yes, then solution is found
                if (Math.Floor(l) == Math.Ceiling(l) && l >= k)
                {
                    flag = true;
                    Console.Write("i = " + i + "\n");
                    Console.Write("j = " + j + "\n");
                    Console.Write("k = " + k + "\n");
                    Console.Write("l = " + (int)l + "\n");
                    Console.Write("Product of " + a + " and "+ b +
                              " can be written as sum of squares"+
                                             " of i, j, k, l \n");
                                                 
                    Console.Write(ab + " = " + i + "*" + i + " + " +
                                     j + "*" + j + " + " + k + "*" +
                                          k + " + " + (int)l + "*" +
                                                      (int)l + "\n");
                     
                }
                k += 1;
            }
            j += 1;
        }
        i += 1;
    }
     
    // Solution cannot be found
    if (flag == false)
    {
        Console.WriteLine("Solution doesn't exist!");
        return ;
    }
}
 
// Driver Code
public static void Main()
{
    int a = 30;
    int b = 4;
    checkEulerFourSquareIdentity(a, b);
}
}
 
// This code is contributed by mits

PHP




<?php
// PHP code to verify Euler's four-square identity
 
// This function prints the four numbers
// if a solution is found Else prints
// solution doesn't exist
function checkEulerFourSquareIdentity($a, $b)
{
    // Number for which we want to
    // find a solution
    $ab = $a * $b;
    $flag = false;
     
    $i = 0;
    while($i * $i <= $ab) // loop for first number
    {
        $j = $i;
        while ($i * $i + $j * $j <= $ab) // loop for second number
        {
            $k = $j;
            while($i * $i + $j * $j +
                  $k * $k <= $ab) // loop for third number
            {
                // Calculate the fourth number
                // and apply square root
                $l = sqrt($ab - ($i * $i + $j *
                                 $j + $k * $k));
                 
                // Check if the fourthNum is Integer or
                // not. If yes, then solution is found
                if (floor($l) == ceil($l) && $l >= $k)
                {
                    $flag = true;
                    print("i = " . $i . "\n");
                    print("j = " . $j . "\n");
                    print("k = " . $k . "\n");
                    print("l = " . $l . "\n");
                    print("Product of " . $a . " and " . $b .
                          " can be written as sum of squares" .
                                          " of i, j, k, l \n");
                    print($ab . " = " . $i . "*" . $i . " + " .
                          $j . "*" . $j . " + " . $k . "*" .
                          $k . " + " . $l . "*" . $l . "\n");
                     
                }
                $k += 1;
            }
            $j += 1;
        }
        $i += 1;
    }
    // Solution cannot be found
    if ($flag == false)
    {
        print("Solution doesn't exist!");
        return 0;
    }
}
 
// Driver Code
$a = 30;
$b = 4;
checkEulerFourSquareIdentity($a, $b);
 
// This code is contributed by mits
?>

Javascript




<script>
    // Javascript code to verify Euler's four-square identity
     
    // This function prints the four numbers
    // if a solution is found Else prints
    // solution doesn't exist
    function checkEulerFourSquareIdentity(a, b)
    {
        // Number for which we want to
        // find a solution
        let ab = a * b;
        let flag = false;
 
        let i = 0;
        while(i * i <= ab) // loop for first number
        {
            let j = i;
            while (i * i + j * j <= ab) // loop for second number
            {
                let k = j;
                while(i * i + j * j +
                      k * k <= ab) // loop for third number
                {
                    // Calculate the fourth number
                    // and apply square root
                    let l = Math.sqrt(ab - (i * i + j * j + k * k));
 
                    // Check if the fourthNum is Integer or
                    // not. If yes, then solution is found
                    if (Math.floor(l) == Math.ceil(l) && l >= k)
                    {
                        flag = true;
                        document.write("i = " + i + "</br>");
                        document.write("j = " + j + "</br>");
                        document.write("k = " + k + "</br>");
                        document.write("l = " + l + "</br>");
                        document.write("Product of " + a + " and "+ b +
                                  " can be written as sum of squares"+
                                                 " of i, j, k, l " + "</br>");
 
                        document.write(ab + " = " + i + "*" + i + " + " +
                                         j + "*" + j + " + " + k + "*" +
                                              k + " + " + l + "*" +
                                                          l + "</br>");
 
                    }
                    k += 1;
                }
                j += 1;
            }
            i += 1;
        }
 
        // Solution cannot be found
        if (flag == false)
        {
            document.write("Solution doesn't exist!" + "</br>");
            return;
        }
    }
     
    let a = 30;
    let b = 4;
    checkEulerFourSquareIdentity(a, b);
 
</script>

Output:  

 
i = 0
j = 2
k = 4
l = 10
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 0*0 + 2*2 + 4*4 + 10*10
i = 2
j = 4
k = 6
l = 8
Product of 30 and 4 can be written as sum of squares of i, j, k, l
120 = 2*2 + 4*4 + 6*6 + 8*8

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :