ในปัญหานี้ เราได้รับตัวเลขสองตัวและเราจำเป็นต้องค้นหาผลคูณของตัวเลขโดยใช้ Identity Four Square Identity ของออยเลอร์
ตัวตนสี่เหลี่ยมของออยเลอร์ เป็นวิธีการหาผลคูณของตัวเลขสองตัวซึ่งสามารถแสดงโดยใช้ผลรวมของ สี่กำลังสอง ของตัวเลขหากตัวเลขสามารถแสดงเป็นผลรวมของสี่เหลี่ยมจัตุรัสได้
ผลิตภัณฑ์ a * b สามารถแสดงเป็นผลรวมของสี่เหลี่ยมสี่ช่องได้หาก
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
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล:
a =54 =2*2 + 3*3 + 4*4 + 5*5
b =10 =1*1 + 2*2 + 1*1 + 2*2
ผลลัพธ์: 1*1 + 1*1 + 3*3 + 23*23
คำอธิบาย:
ผลคูณของ a และ b =540
ซึ่งสามารถแสดงได้หลายวิธี เราจะพบวิธีแก้ปัญหาหนึ่งข้อที่นี่
540 =1*1 + 1*1 + 3*3 + 23*23 =1 + 1 + 9 + 529
แนวทางการแก้ปัญหา -
วิธีแก้ปัญหาอย่างง่ายคือการใช้วิธีทดลองเพื่อลองใช้ชุดค่าผสมสี่สี่เหลี่ยมแต่ละชุดเพื่อแก้ปัญหา สำหรับสิ่งนี้ เราจะใช้ nested loops, หนึ่ง nested loop สำหรับแต่ละค่ากำลังสอง จากนั้นหาค่าที่คำนวณและพิมพ์ผลรวมที่เป็นไปได้ทั้งหมด
วิธีแก้ปัญหานี้ค่อนข้างซับซ้อนและความซับซ้อนของเวลาเป็นของคำสั่ง
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
อีก วิธีการแก้ปัญหาที่ใช้เวลาน้อยกว่าคือใช้การวนซ้ำ 3 วงและตรวจสอบค่าที่ออกมา หากจำนวนที่เหลือเป็นกำลังสองสมบูรณ์ ค่ารูทจะเป็นตัวเลขที่สี่ มิฉะนั้น จะไม่สามารถแก้ปัญหาได้ วิธีนี้อาจลบลูปที่สี่และทำให้โซลูชันมีประสิทธิภาพ
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#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