
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Euler's Four Square Identity in C++
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 = x12 + x22 + x32 + x42
b = y12 + y22 + y32 + y42
a * b = z12 + z22 + z32 + z42
Let’s take an example to understand the problem,
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
Solution Approach −
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 ).
Program to illustrate the working of our solution,
Example
#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; }
Output −
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.
Program to illustrate the working of our solution,
Example
#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; }
Output −
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 Articles
- How to get Euler's constant value in JavaScript?
- Lagrange’s four square theorem in C++
- Euler and Hamiltonian Paths
- Euler Circuit in a Directed Graph
- Check if given four points form a Square
- Swift program to check if a given square matrix is an Identity Matrix
- Euler Method for solving differential equation in C++
- C++ Program to Implement Euler Theorem
- Find the greatest four digit number which is a perfect square.
- Find the square root of 12.0068 correct to four decimal places.
- Minimum edges required to add to make Euler Circuit in Python
- Minimum edges required to add to make Euler Circuit in C++
- Find the least number with four digits which is a perfect square
- Find the least number of four digits which is a perfect square.
- What is identity ?
