এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যা দেওয়া হয়েছে N <=10^18। আমাদের কাজ হল সংখ্যার সমস্ত প্রাইম ফ্যাক্টর প্রিন্ট করা এবং সাথে সেখানে উপস্থিতির ফ্রিকোয়েন্সি।
সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,
Input: 100 Output: 2 2 5 2 Explanation: prime factorization of 100 = 2 * 2 * 5 * 5.
এই সমস্যাটি সমাধান করার জন্য, আমাদের সংখ্যাটির মৌলিক গুণনীয়কগুলি খুঁজে বের করতে হবে এবং তারপরে তাদের ফ্রিকোয়েন্সি গণনা করতে হবে৷
এর জন্য, আমরা ফ্যাক্টর হিসাবে 2 এর ফ্রিকোয়েন্সি পরীক্ষা করব এবং সংখ্যাটিকে 2 দ্বারা ভাগ করব। তারপর 3 থেকে বর্গমূল n পর্যন্ত পরীক্ষা করব। প্রতিটি মৌলিক সংখ্যার ফ্রিকোয়েন্সি ভাগ করুন এবং বৃদ্ধি করুন যা সংখ্যাটির একটি গুণনীয়ক। এবং সংখ্যাটি 1 হয়ে গেলে থামুন। তারপর সেখানে ফ্রিকোয়েন্সি সহ সমস্ত প্রাইম প্রিন্ট করুন।
নীচের কোডটি আমাদের সমাধানের বাস্তবায়ন দেখায়,
উদাহরণ
#include <iostream> #include <math.h> using namespace std; void factorize(long long n){ int count = 0; while (!(n % 2)) { n/= 2; count++; } if (count) cout<<2<<"\t"<<count<<endl; for (long long i = 3; i <= sqrt(n); i += 2) { count = 0; while (n % i == 0) { count++; n = n / i; } if (count) cout<<i<<"\t"<<count<<endl; } if (n > 2) cout<<n<<"\t"<<1<<endl; } int main() { long long N = 21000; cout<<"The prime factors and their frequencies of the number "<<N<<" are \n"; factorize(N); return 0; }
আউটপুট
The prime factors and their frequencies of the number 21000 are 2 3 3 1 5 3 7 1