根据欧拉的四个平方恒等式,如果a和b两者都可以分别表示为四个平方的和,则任何两个数字a和b的乘积可以表示为四个平方的和。
数学上,如果a = 和b =
然后,a * b =
其中c1,c2,c3,c4,d1,d2,d3,d4,e1,e2,e3,e4是任何整数。
一些示例是,a = = 30头= = 4 ab = a * b = 120 = a = = 15羽= = 24 ab = a * b = 810 = a = = 15羽= = 26 ab = a * b = 390 =
例子:
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
解释 :
2个数字a(30)和b(4)的乘积可以表示为4个平方的和,如欧拉的四个平方相同。上面是乘积a * b的2个表示,以4个平方的形式表示。显示了乘积a * b的所有可能表示,并以四个平方的形式表示。
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
方法 :
蛮力:
通过使用4个循环i,j,k,l查找四个平方中的每个平方,可以以4个平方的形式表示给定的数字(a * b)。这给出了所有可能的组合,以形成a * b作为四个平方的总和。在最内层循环(l循环)的每次迭代中,用乘积a * b检查总和。如果存在匹配项,则打印平方和等于a * b的4个数字(i,j,k和l)。
C++
// CPP code to verify euler's four square identity
#include
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
C++
// CPP code to verify Euler's four-square identity
#include
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<
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
= $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
?>
输出:
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
改进算法:
上述算法的时间复杂度为在最坏的情况下。可以减少到通过从乘积a * b中减去所有(i,j,k)的i,j和k的平方,并检查该值是否为理想平方。如果这是一个完美的正方形,那么我们已经找到了解决方案。
C++
// CPP code to verify Euler's four-square identity
#include
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<
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
= $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
?>
输出:
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