Computer >> Máy Tính >  >> Lập trình >> C ++

Bốn nhận dạng hình vuông của Euler trong C ++

Trong bài toán này, chúng ta được cho hai số và chúng ta cần tìm tích của các số đó bằng cách sử dụng bốn phương diện tích bình phương của Euler.

Bản sắc bốn hình vuông của Euler là phương pháp để tìm tích của hai số có thể được biểu diễn bằng tổng của bốn hình vuông của số nếu các số có thể được biểu diễn dưới dạng tổng của bốn hình vuông.

Tích a * b có thể được biểu diễn dưới dạng tổng của bốn hình vuông nếu

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

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào:

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

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


Đầu ra: 1 * 1 + 1 * 1 + 3 * 3 + 23 * 23

Giải thích:

Tích của a và b =540,

có thể được biểu diễn theo nhiều cách. Chúng tôi sẽ xem xét một giải pháp ở đây,

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

Phương pháp tiếp cận Giải pháp -

Một giải pháp đơn giản cho vấn đề này là sử dụng phương pháp thử để thử từng tổ hợp bốn ô vuông để giải quyết vấn đề. Đối với điều này, chúng tôi sẽ sử dụng các vòng lặp lồng nhau, một vòng lặp lồng nhau cho mỗi giá trị bình phương. Và sau đó tìm giá trị được tính toán và in tất cả các kết hợp có thể có của biểu diễn tổng.

Giải pháp này hơi phức tạp và thời gian phức tạp theo thứ tự
O ((a * b) 4 ).

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

 #include  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 <<"Sản phẩm" <