একটি সংখ্যা N এবং অন্য একটি সংখ্যা k দেওয়া থাকলে, N কি k সংখ্যার গুণফল হিসেবে প্রকাশ করা সম্ভব কিনা যাচাই করতে হবে। N = 54, k = 3 হলে [2, 3, 9] প্রিন্ট হবে, না হলে বোঝানো হবে।
সমাধান: N-এর সব প্রাইম ফ্যাক্টর (prime factor) বের করে ভেক্টরে রাখা। তারপর k সংখ্যক ১-র চেয়ে বড় সংখ্যা বের করতে ভেক্টরের সাইজ k-র চেয়ে বড় কিনা যাচাই। সাইজ কম হলে -1, অন্যথায় প্রথম k-1 ফ্যাক্টর প্রিন্ট এবং শেষ ফ্যাক্টর হবে বাকি সব সংখ্যার গুণফল।
উদাহরণ
#include<iostream> #include<vector> #include<cmath> using namespace std; int getKFactors(int n, int k){ int i; vector vec; while(n % 2 == 0){ vec.push_back(2); n = n/2; // ২ দিয়ে ভাগ করে n কমানো } for(i = 3; i <= sqrt(n); i=i+2){ // i ২ বাড়াতে অড্ড (odd) সংখ্যা পাওয়া while(n % i == 0){ n = n/i; vec.push_back(i); } } if(n > 2){ vec.push_back(n); } if(vec.size() < k){ cout << "Cannot be represented"; return -1; } for (int i=0; i আউটপুট
2, 3, 9