কম্পিউটার টিউটোরিয়াল

সি++-এ অয়লারের চার বর্গ অভেদ


এই সমস্যায় আমাদের দুটি সংখ্যা দেওয়া হয়েছে এবং আমাদের অয়লারের চার বর্গ অভেদ ব্যবহার করে সংখ্যাগুলোর গুণফল বের করতে হবে।

অয়লারের চার বর্গ অভেদ হলো দুটি সংখ্যার গুণফল বের করার পদ্ধতি যা চার বর্গের যোগফল হিসেবে উপস্থাপিত হতে পারে যদি সংখ্যাগুলো চার বর্গের যোগফল হিসেবে লেখা যায়।

গুণফল a * b চার বর্গের যোগফল হিসেবে লেখা যায় যদি

a = x12 + x22 + x32 + x42
 b = y12 + y22 + y32 + y42
 a * b = z12 + z22 + z32 + z42

উদাহরণ দিয়ে বুঝি

ইনপুট:

       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

সমাধানের পদ্ধতি

এই সমস্যার একটি সহজ সমাধান হলো ট্রায়াল মেথড ব্যবহার করে চার বর্গের প্রতিটি কম্বিনেশন চেষ্টা করা। এর জন্য নেস্টেড লুপ ব্যবহার করা হবে, প্রতিটি বর্গের মানর জন্য একটি নেস্টেড লুপ। তারপর محসাব করা মান খুঁজে বের করে সব সম্ভাব্য যোগফল উপস্থাপনা প্রিন্ট করা হবে।

এই সমাধান কিছুটা জটিল এবং সময় জটিলতা অনুমানিক
O( (a*b)4 )।

সমাধান minhaj করার প্রোগ্রাম (প্রথম পদ্ধতি)

#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 ... (আরও ফলাফল)

দ্বিতীয় পদ্ধতি: কম সময় জটিলতায় সমাধানের জন্য তিনটি নেস্টেড লুপ এবং চতুর্থ মান চেক করা - অবশিষ্ট সংখ্যা যদি পূর্ণ বর্গ হয়, তবে বর্গমূল মান চতুর্থ সংখ্যা হবে, অন্যথায় সমাধান সম্ভব নয়। এই পদ্ধতিতে চতুর্থ লুপ বাদ দেওয়া যায় এবং সমাধান আরও কার্যকর হয়।

সমাধান minhaj করার প্রোগ্রাম (দ্বিতীয় পদ্ধতি)

#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 ... (আরও ফলাফল)
  1. C++-এ বর্গের পরিবেষ্টিত বৃত্তের ক্ষেত্রফল

  2. C++ এডাম নম্বর (Adam Number)

  3. C++-এ বর্গক্ষেত্রের এলাকা বের করার প্রোগ্রাম

  4. সি++-এ NaN (Not a Number) কী?