इस समस्या में, हमें एक पूर्णांक 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. हैं