সমস্যা বিবৃতি
একটি পূর্ণসংখ্যা N দেওয়া হয়েছে। সর্বনিম্ন সংখ্যক বর্গ মুক্ত ভাজক খুঁজুন।
N-এর ফ্যাক্টরাইজেশনে শুধুমাত্র সেইসব ভাজক থাকা উচিত যেগুলো পূর্ণ বর্গ নয়
উদাহরণ
যদি N =24 হয় তাহলে নিম্নরূপ −
3টি বর্গ মুক্ত গুণনীয়ক রয়েছেগুণনীয়ক =2 * 6 * 2
অ্যালগরিদম
- N এর বর্গমূল পর্যন্ত সমস্ত মৌলিক গুণনীয়ক খুঁজুন
- এখন, N এর বর্গমূলের থেকে কম বা সমান সমস্ত মৌলিক গুণনীয়ক বিবেচনা করুন এবং প্রতিটি মৌলিক গুণনীয়কের জন্য N সংখ্যায় এর সর্বোচ্চ শক্তি খুঁজুন (যেমন 24-এর মধ্যে 2-এর সর্বোচ্চ শক্তি 3)
- এখন, আমরা জানি যে যদি একটি মৌলিক গুণনীয়কের শক্তি 1-এর বেশি হয়, তবে এটিকে নিজের সাথে গোষ্ঠীভুক্ত করা যায় না (উদাহরণস্বরূপ 2-এর 24-এর মধ্যে 3-এর শক্তি, তাই 2 x 2 =4 বা 2 x 2 x 2 =8 24 এর ফ্যাক্টরাইজেশনে ঘটতে পারে না কারণ উভয়ই বর্গমুক্ত নয়) যেহেতু এটি কিছু নিখুঁত বর্গ দ্বারা বিভাজ্য হবে
- কিন্তু অন্য একটি মৌলিক গুণনীয়ক (শুধুমাত্র একবার) দিয়ে গোষ্ঠীবদ্ধ একটি মৌলিক গুণনীয়ক কখনোই কোনো নিখুঁত বর্গ দ্বারা বিভাজ্য হবে না
- এটি আমাদের একটি অন্তর্দৃষ্টি দেয় যে উত্তর হবে N সংখ্যার সমস্ত মৌলিক গুণনীয়কের সর্বোচ্চ ক্ষমতার সর্বোচ্চ।
উদাহরণ
#include <iostream> #include <vector> #include <cstring> using namespace std; #define MAX 1005 void getPrimes(vector<int>& primes) { bool prime[MAX]; memset(prime, true, sizeof(prime)); for (int p = 2; p * p < MAX; p++) { if (prime[p] == true) { for (int i = p * 2; i < MAX; i += p) prime[i] = false; } } for (int p = 2; p < MAX; p++) if (prime[p]) primes.push_back(p); } int getMinimumSquareFreeDivisors(int n) { vector<int> primes; getPrimes(primes); int maxCnt = 0; for (int i = 0; i < primes.size() && primes[i] * primes[i] <= n; i++) { if (n % primes[i] == 0) { int tmp = 0; while (n % primes[i] == 0) { tmp++; n /= primes[i]; } maxCnt = max(maxCnt, tmp); } } if (maxCnt == 0) maxCnt = 1; return maxCnt; } int main() { int n = 24; cout << "Minimum number of square free divisors = " << getMinimumSquareFreeDivisors(n) << endl; return 0; }
আউটপুট
যখন আপনি উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −
তৈরি করেMinimum number of square free divisors = 3