একটি নম্বর দেওয়া হয়। আমাদের দুটি জোড়া খুঁজে বের করতে হবে, যা সংখ্যাটিকে দুটি ঘনকের যোগফল হিসাবে উপস্থাপন করতে পারে। সুতরাং আমাদের দুটি জোড়া (a, b) এবং (c, d) খুঁজে বের করতে হবে যাতে প্রদত্ত সংখ্যা n কে n =a 3 হিসাবে প্রকাশ করা যায়। + b 3 =c 3 + d 3
ধারণা সহজ. এখানে প্রতিটি সংখ্যা a, b, c এবং d সবগুলোই n 1/3 থেকে কম . n 1/3 থেকে কম সংখ্যা দ্বারা গঠিত প্রতিটি স্বতন্ত্র জোড়ার জন্য (x, y) , যদি তাদের যোগফল (x 3 + y 3 ) প্রদত্ত সংখ্যার সমান, আমরা সেগুলিকে কী হিসাবে যোগফলের মান সহ হ্যাশ টেবিলে সংরক্ষণ করি, তারপর যদি একই যোগফল আবার আসে, তবে সেগুলি কেবল প্রতিটি জোড়া প্রিন্ট করে
অ্যালগরিদম
getPairs(n): begin cube_root := cube root of n map as int type key and pair type value for i in range 1 to cube_root, do for j in range i + 1 to cube_root, do sum = i3 + j3 if sum is not same as n, then skip next part, go to second iteration if sum is present into map, then print pair, and (i, j), else insert (i,j) with corresponding sum into the map done done end
উদাহরণ
#include <iostream> #include <cmath> #include <map> using namespace std; int getPairs(int n){ int cube_root = pow(n, 1.0/3.0); map<int, pair<int, int> > my_map; for(int i = 1; i<cube_root; i++){ for(int j = i + 1; j<= cube_root; j++){ int sum = i*i*i + j*j*j; if(sum != n) continue; if(my_map.find(sum) != my_map.end()){ cout << "(" << my_map[sum].first << ", " << my_map[sum].second << ") and (" << i << ", " << j << ")" << endl; }else{ my_map[sum] = make_pair(i, j); } } } } int main() { int n = 13832; getPairs(n); }
আউটপুট
(2, 24) and (18, 20)