Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Brahmagupta Fibonacci Identity

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Brahmagupta Fibonacci identity states that the product of two numbers each of which is a sum of 2 squares can be represented as sum of 2 squares in 2 different forms.

Mathematically,  

If a = p^2 + q^2 and b = r^2 + s^2 
then a * b can be written in two 
different forms: 
= (p^2 + q^2) * (r^2 + s^2) 
= (pr – qs)^2 + (ps + qr)^2 …………(1) 
= (pr + qs)^2 + (ps – qr)^2 …………(2)

Some Examples are:  

a = 5(= 1^2 + 2^2) 
b = 25(= 3^2 + 4^2) 
a*b = 125 
Representation of a * b as sum of 2 squares: 
2^2 + 11^2 = 125 
5^2 + 10^2 = 125 
Explanations: 
a = 5 and b = 25 each can be expressed as a sum of 2 squares and their product a*b which is 125 can be expressed as sum of 2 squares in two different forms. This is according to 
the Brahmagupta Fibonacci Identity and satisfies the identity condition.
a = 13(= 2^2 + 3^2) 
b = 41(= 4^2 + 5^2) 
a*b = 533 
Representation of a * b as sum of 2 squares: 
2^2 + 23^2 = 533 
7^2 + 22^2 = 533
a = 85(= 6^2 + 7^2) 
b = 41(= 4^2 + 5^2) 
a*b = 3485 
Representation of a * b as sum of 2 squares: 
2^2 + 59^2 = 3485 
11^2 + 58^2 = 3485 
26^2 + 53^2 = 3485 
37^2 + 46^2 = 3485

Below is a program to verify Brahmagupta Fibonacci identity for given two numbers which are sums of two squares. 

C++




// CPP code to verify
// Brahmagupta Fibonacci identity
#include <bits/stdc++.h>
using namespace std;
 
void find_sum_of_two_squares(int a,
                             int b)
{
    int ab = a*b;
 
    // represent the product
    // as sum of 2 squares
    for (int i = 0; i * i <= ab; i++)
    {
        for (int j = i; i * i +
                        j * j <= ab; j++)
        {
 
            // check identity criteria
            if (i * i + j * j == ab)
                cout << i << "^2 + " << j
                     << "^2 = " << ab << "\n";
        }
    }
}
 
// Driver code
int main()
{
    // 1^2 + 2^2
    int a = 1 * 1 + 2 * 2;
     
    // 3^2 + 4^2
    int b = 3 * 3 + 4 * 4;
 
    cout << "Representation of a * b as sum"
            " of 2 squares:\n";
 
    // express product of sum of 2 squares
    // as sum of (sum of 2 squares)
    find_sum_of_two_squares(a, b);
}

Java




// Java code to verify Brahmagupta
// Fibonacci identity
 
class GFG
{
    static void find_sum_of_two_squares(int a,
                                        int b)
{
    int ab = a * b;
 
    // represent the product
    // as sum of 2 squares
    for (int i = 0; i * i <= ab; i++)
    {
        for (int j = i; i * i +
                        j * j <= ab; j++)
        {
            // check identity criteria
            if (i * i + j * j == ab)
                System.out.println(i + "^2 + " +
                                   j +"^2 = " + ab);
        }
    }
}
 
// Driver code
public static void main(String[] args)
{
    // 1^2 + 2^2
    int a = 1 * 1 + 2 * 2;
     
    // 3^2 + 4^2
    int b = 3 * 3 + 4 * 4;
 
    System.out.println("Representation of a * b " +
                        "as sum of 2 squares:");
 
    // express product of sum
    // of 2 squares as sum of
    // (sum of 2 squares)
    find_sum_of_two_squares(a, b);
}
}
 
// This code is contributed
// by Smitha Dinesh Semwal

Python 3




# Python 3 code to verify
# Brahmagupta Fibonacci identity
 
def find_sum_of_two_squares(a, b):
 
    ab = a * b
 
    # represent the product
    # as sum of 2 squares
    i=0;
    while(i * i <= ab):
        j = i
        while(i * i + j * j <= ab):
 
            # check identity criteria
            if (i * i + j * j == ab):
                print(i,"^2 + ",j,"^2 = ",ab)
            j += 1
        i += 1
     
# Driver code
a = 1 * 1 + 2 * 2 # 1^2 + 2^2
b = 3 * 3 + 4 * 4 # 3^2 + 4^2
 
print("Representation of a * b as sum"
                     " of 2 squares:")
 
# express product of sum of 2 squares
# as sum of (sum of 2 squares)
find_sum_of_two_squares(a, b)
 
# This code is contributed by
# Smitha Dinesh Semwal

C#




// C# code to verify Brahmagupta
// Fibonacci identity
using System;
 
class GFG
{
    static void find_sum_of_two_squares(int a,
                                        int b)
    {
    int ab = a * b;
 
    // represent the product
    // as sum of 2 squares
    for (int i = 0; i * i <= ab; i++)
    {
        for (int j = i; i * i +
                        j * j <= ab; j++)
        {
            // check identity criteria
            if (i * i + j * j == ab)
                Console.Write(i + "^2 + " + j +
                          "^2 = " + ab + "\n");
        }
    }
}
 
// Driver code
public static void Main()
{
    // 1^2 + 2^2
    int a = 1 * 1 + 2 * 2;
     
    // 3^2 + 4^2
    int b = 3 * 3 + 4 * 4;
 
    Console.Write("Representation of a * b " +
                   "as sum of 2 squares:\n");
 
    // express product of sum of
    // 2 squares as sum of (sum of
    // 2 squares)
    find_sum_of_two_squares(a, b);
}
}
 
// This code is contributed
// by Smitha Dinesh Semwal

PHP




<?php
// PHP code to verify
// Brahmagupta Fibonacci identity
 
function find_sum_of_two_squares($a, $b)
{
    $ab = $a * $b;
 
    // represent the product
    // as sum of 2 squares
    for ($i = 0; $i * $i <= $ab; $i++)
    {
        for ($j = $i; $i * $i +
                      $j * $j <= $ab; $j++)
        {
 
            // check identity criteria
            if ($i * $i + $j * $j == $ab)
                echo $i ,"^2 + ", $j ,
                     "^2 = " , $ab ,"\n";
        }
    }
}
 
// Driver code
// 1^2 + 2^2
$a = 1 * 1 + 2 * 2;
 
// 3^2 + 4^2
$b = 3 * 3 + 4 * 4;
 
echo "Representation of a * b ".
     "as sum of 2 squares:\n";
 
// express product of sum of
// 2 squares as sum of (sum
// of 2 squares)
find_sum_of_two_squares($a, $b);
 
// This code is contributed by aj_36
?>

Javascript




<script>
 
// JavaScript program to verify Brahmagupta
// Fibonacci identity
 
    function find_sum_of_two_squares(a, b)
{
     let ab = a * b;
   
    // represent the product
    // as sum of 2 squares
    for (let i = 0; i * i <= ab; i++)
    {
        for (let j = i; i * i +
                        j * j <= ab; j++)
        {
            // check identity criteria
            if (i * i + j * j == ab)
                document.write(i + "^2 + " +
                                   j +"^2 = " + ab + "<br/>");
        }
    }
}
 
// Driver code
     
     // 1^2 + 2^2
    let a = 1 * 1 + 2 * 2;
       
    // 3^2 + 4^2
    let b = 3 * 3 + 4 * 4;
   
     document.write("Representation of a * b " +
                        "as sum of 2 squares:" + "<br/>");
   
    // express product of sum
    // of 2 squares as sum of
    // (sum of 2 squares)
    find_sum_of_two_squares(a, b);
     
    // This code is contributed by code_hunt.
</script>

Output : 

Representation of a * b as sum of 2 squares:
2^2 + 11^2 = 125
5^2 + 10^2 = 125

 

Time complexity : O(a*b) 
Auxiliary Space : O(1)


My Personal Notes arrow_drop_up
Last Updated : 09 Nov, 2022
Like Article
Save Article
Similar Reads
Related Tutorials