- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

In this problem, we are given two numbers and we need to find the product of the numbers using Euler's* four square Identity. *

**Euler’s Four Square Identity **is the method to find the product of two numbers which can be represented using the sum of *four squares *of the number if the numbers can be represented as sum of four squares.

The product a * b can be represented as the sum of four squares if

*a = x1 ^{2} + x2^{2} + x3^{2} + x4^{2}*

b = y1^{2} + y2^{2} + y3^{2} + y4^{2}

a * b = z1^{2} + z2^{2} + z3^{2} + z4^{2}

**Input: **

a = 54 = 2*2 + 3*3 + 4*4 + 5*5

b = 10 = 1*1 + 2*2 + 1*1 + 2*2

**Output: **1*1 + 1*1 + 3*3 + 23*23

**Explanation: **

The product of a and b = 540,

which can be represented in multiple ways. We will find consider one solution here,

*540 = 1*1 + 1*1 + 3*3 + 23*23 = 1 + 1 + 9 + 529*

A simple solution to the problem is by using a trial method to try each of the four square combinations to solve the problem. For this we will be using nested loops, one nested loop for each square value. And then find the value calculated and print all possible combinations of sum representation.

This solution is a bit complex and the time complexity is of the order*O( (a*b) ^{4} ). *

#include <bits/stdc++.h> using namespace std; void findEulerSquareNumberValue(int a, int b) { int prod = a * b; int sumSquare = 0; for (int x = 0; x <= sqrt(prod); x++) { for (int y = x; y <= sqrt(prod); y++) { for (int z = y; z <= sqrt(prod); z++) { for (int k = z; k <= sqrt(prod); k++) { sumSquare = (x*x) + (y*y) + (z*z) + (k*k); if (sumSquare == prod) { cout<<"The product "<<a<<"*"<<b<<" = "<<prod<<" represented as "; cout<<x<<"*"<<x<<" + "; cout<<y<<"*"<<y<<" + "; cout<<z<<"*"<<z<<" + "; cout<<k<<"*"<<k<<endl; cout<<endl; } } } } } } int main() { int a = (2*2) + (3*3) + (4*4) + (5*5); int b = (1*1) + (2*2) + (1*1) + (2*2); cout<<"a = (2*2) + (3*3) + (4*4) + (5*5) = "<<a<<endl; cout<<"b = (1*1) + (2*2) + (1*1) + (2*2) = "<<b<<endl; findEulerSquareNumberValue(a, b); return 0; }

a = (2*2) + (3*3) + (4*4) + (5*5) = 54 b = (1*1) + (2*2) + (1*1) + (2*2) = 10 The product 54*10 = 540 represented as 1*1 + 1*1 + 3*3 + 23*23 The product 54*10 = 540 represented as 1*1 + 3*3 + 13*13 + 19*19 The product 54*10 = 540 represented as 1*1 + 5*5 + 15*15 + 17*17 The product 54*10 = 540 represented as 1*1 + 7*7 + 7*7 + 21*21 The product 54*10 = 540 represented as 1*1 + 9*9 + 13*13 + 17*17 The product 54*10 = 540 represented as 2*2 + 4*4 + 6*6 + 22*22 The product 54*10 = 540 represented as 2*2 + 4*4 + 14*14 + 18*18 The product 54*10 = 540 represented as 2*2 + 6*6 + 10*10 + 20*20 The product 54*10 = 540 represented as 2*2 + 12*12 + 14*14 + 14*14 The product 54*10 = 540 represented as 3*3 + 3*3 + 9*9 + 21*21 The product 54*10 = 540 represented as 3*3 + 7*7 + 11*11 + 19*19 The product 54*10 = 540 represented as 3*3 + 9*9 + 15*15 + 15*15 The product 54*10 = 540 represented as 3*3 + 11*11 + 11*11 + 17*17 The product 54*10 = 540 represented as 4*4 + 10*10 + 10*10 + 18*18 The product 54*10 = 540 represented as 5*5 + 5*5 + 7*7 + 21*21 The product 54*10 = 540 represented as 5*5 + 11*11 + 13*13 + 15*15 The product 54*10 = 540 represented as 6*6 + 6*6 + 12*12 + 18*18 The product 54*10 = 540 represented as 7*7 + 7*7 + 9*9 + 19*19 The product 54*10 = 540 represented as 7*7 + 9*9 + 11*11 + 17*17 The product 54*10 = 540 represented as 9*9 + 11*11 + 13*13 + 13*13 The product 54*10 = 540 represented as 10*10 + 10*10 + 12*12 + 14*14

**Another **method to solve the problem with less time complexity is using three nested loop and checking the forth value, if the remaining number is perfect square, the root value is the fourth number otherwise the solution is not possible. This method will possibly remove the forth loop and make the solution effective.

#include <bits/stdc++.h> using namespace std; void findEulerSquareNumberValue(int a, int b) { int prod = a * b; int sumSquare = 0; for (int x = 0; x <= sqrt(prod); x++) { for (int y = x; y <= sqrt(prod); y++) { for (int z = y; z <= sqrt(prod); z++) { sumSquare = (x*x) + (y*y) + (z*z); float k = sqrt(prod - sumSquare); if ( floor(k) == ceil(k)) { cout<<"The product "<<a<<"*"<<b<<" = "<<prod<<" represented as "; cout<<x<<"*"<<x<<" + "; cout<<y<<"*"<<y<<" + "; cout<<z<<"*"<<z<<" + "; cout<<k<<"*"<<k<<endl; cout<<endl; } } } } } int main() { int a = (2*2) + (3*3) + (4*4) + (5*5); int b = (1*1) + (2*2) + (1*1) + (2*2); cout<<"a = (2*2) + (3*3) + (4*4) + (5*5) = "<<a<<endl; cout<<"b = (1*1) + (2*2) + (1*1) + (2*2) = "<<b<<endl; findEulerSquareNumberValue(a, b); return 0; }

a = (2*2) + (3*3) + (4*4) + (5*5) = 54 b = (1*1) + (2*2) + (1*1) + (2*2) = 10 The product 54*10 = 540 represented as 1*1 + 1*1 + 3*3 + 23*23 The product 54*10 = 540 represented as 1*1 + 1*1 + 23*23 + 3*3 The product 54*10 = 540 represented as 1*1 + 3*3 + 13*13 + 19*19 The product 54*10 = 540 represented as 1*1 + 3*3 + 19*19 + 13*13 The product 54*10 = 540 represented as 1*1 + 3*3 + 23*23 + 1*1 The product 54*10 = 540 represented as 1*1 + 5*5 + 15*15 + 17*17 The product 54*10 = 540 represented as 1*1 + 5*5 + 17*17 + 15*15 The product 54*10 = 540 represented as 1*1 + 7*7 + 7*7 + 21*21 The product 54*10 = 540 represented as 1*1 + 7*7 + 21*21 + 7*7 The product 54*10 = 540 represented as 1*1 + 9*9 + 13*13 + 17*17 The product 54*10 = 540 represented as 1*1 + 9*9 + 17*17 + 13*13 The product 54*10 = 540 represented as 1*1 + 13*13 + 17*17 + 9*9 The product 54*10 = 540 represented as 1*1 + 13*13 + 19*19 + 3*3 The product 54*10 = 540 represented as 1*1 + 15*15 + 17*17 + 5*5 The product 54*10 = 540 represented as 2*2 + 4*4 + 6*6 + 22*22 The product 54*10 = 540 represented as 2*2 + 4*4 + 14*14 + 18*18 The product 54*10 = 540 represented as 2*2 + 4*4 + 18*18 + 14*14 The product 54*10 = 540 represented as 2*2 + 4*4 + 22*22 + 6*6 The product 54*10 = 540 represented as 2*2 + 6*6 + 10*10 + 20*20 The product 54*10 = 540 represented as 2*2 + 6*6 + 20*20 + 10*10 The product 54*10 = 540 represented as 2*2 + 6*6 + 22*22 + 4*4 The product 54*10 = 540 represented as 2*2 + 10*10 + 20*20 + 6*6 The product 54*10 = 540 represented as 2*2 + 12*12 + 14*14 + 14*14 The product 54*10 = 540 represented as 2*2 + 14*14 + 14*14 + 12*12 The product 54*10 = 540 represented as 2*2 + 14*14 + 18*18 + 4*4 The product 54*10 = 540 represented as 3*3 + 3*3 + 9*9 + 21*21 The product 54*10 = 540 represented as 3*3 + 3*3 + 21*21 + 9*9 The product 54*10 = 540 represented as 3*3 + 7*7 + 11*11 + 19*19 The product 54*10 = 540 represented as 3*3 + 7*7 + 19*19 + 11*11 The product 54*10 = 540 represented as 3*3 + 9*9 + 15*15 + 15*15 The product 54*10 = 540 represented as 3*3 + 9*9 + 21*21 + 3*3 The product 54*10 = 540 represented as 3*3 + 11*11 + 11*11 + 17*17 The product 54*10 = 540 represented as 3*3 + 11*11 + 17*17 + 11*11 The product 54*10 = 540 represented as 3*3 + 11*11 + 19*19 + 7*7 The product 54*10 = 540 represented as 3*3 + 13*13 + 19*19 + 1*1 The product 54*10 = 540 represented as 3*3 + 15*15 + 15*15 + 9*9 The product 54*10 = 540 represented as 4*4 + 6*6 + 22*22 + 2*2 The product 54*10 = 540 represented as 4*4 + 10*10 + 10*10 + 18*18 The product 54*10 = 540 represented as 4*4 + 10*10 + 18*18 + 10*10 The product 54*10 = 540 represented as 4*4 + 14*14 + 18*18 + 2*2 The product 54*10 = 540 represented as 5*5 + 5*5 + 7*7 + 21*21 The product 54*10 = 540 represented as 5*5 + 5*5 + 21*21 + 7*7 The product 54*10 = 540 represented as 5*5 + 7*7 + 21*21 + 5*5 The product 54*10 = 540 represented as 5*5 + 11*11 + 13*13 + 15*15 The product 54*10 = 540 represented as 5*5 + 11*11 + 15*15 + 13*13 The product 54*10 = 540 represented as 5*5 + 13*13 + 15*15 + 11*11 The product 54*10 = 540 represented as 5*5 + 15*15 + 17*17 + 1*1 The product 54*10 = 540 represented as 6*6 + 6*6 + 12*12 + 18*18 The product 54*10 = 540 represented as 6*6 + 6*6 + 18*18 + 12*12 The product 54*10 = 540 represented as 6*6 + 10*10 + 20*20 + 2*2 The product 54*10 = 540 represented as 6*6 + 12*12 + 18*18 + 6*6 The product 54*10 = 540 represented as 7*7 + 7*7 + 9*9 + 19*19 The product 54*10 = 540 represented as 7*7 + 7*7 + 19*19 + 9*9 The product 54*10 = 540 represented as 7*7 + 7*7 + 21*21 + 1*1 The product 54*10 = 540 represented as 7*7 + 9*9 + 11*11 + 17*17 The product 54*10 = 540 represented as 7*7 + 9*9 + 17*17 + 11*11 The product 54*10 = 540 represented as 7*7 + 9*9 + 19*19 + 7*7 The product 54*10 = 540 represented as 7*7 + 11*11 + 17*17 + 9*9 The product 54*10 = 540 represented as 7*7 + 11*11 + 19*19 + 3*3 The product 54*10 = 540 represented as 9*9 + 11*11 + 13*13 + 13*13 The product 54*10 = 540 represented as 9*9 + 11*11 + 17*17 + 7*7 The product 54*10 = 540 represented as 9*9 + 13*13 + 13*13 + 11*11 The product 54*10 = 540 represented as 9*9 + 13*13 + 17*17 + 1*1 The product 54*10 = 540 represented as 9*9 + 15*15 + 15*15 + 3*3 The product 54*10 = 540 represented as 10*10 + 10*10 + 12*12 + 14*14 The product 54*10 = 540 represented as 10*10 + 10*10 + 14*14 + 12*12 The product 54*10 = 540 represented as 10*10 + 10*10 + 18*18 + 4*4 The product 54*10 = 540 represented as 10*10 + 12*12 + 14*14 + 10*10 The product 54*10 = 540 represented as 11*11 + 11*11 + 17*17 + 3*3 The product 54*10 = 540 represented as 11*11 + 13*13 + 13*13 + 9*9 The product 54*10 = 540 represented as 11*11 + 13*13 + 15*15 + 5*5 The product 54*10 = 540 represented as 12*12 + 14*14 + 14*14 + 2*2

- Related Questions & Answers
- Lagrange’s four square theorem in C++
- How to get Euler's constant value in JavaScript?
- Euler’s criterion in java
- Check if given four points form a Square
- Pascal's Triangle in C++
- Bertrand's Postulate in C++
- Parseval’s Theorem & Parseval’s Identity of Fourier Transform
- Pascal's Triangle II in C++
- Extended Midy's theorem in C++
- Fermat's Last Theorem in C++
- Fermat's little theorem in C++
- 1's Complement vs 2's Complement
- Program for Identity Matrix in C
- C++ Largest Subtree having Equal No of 1's and 0's
- C++ Program to Implement Euler Theorem

Advertisements