इस समस्या में, हमें एक पूर्णांक N दिया गया है। और हमें उन सभी अर्ध-अभाज्य संख्याओं को प्रिंट करना है जो N से कम या बराबर हैं।
इस समस्या को हल करने से पहले, आइए समझते हैं कि अर्ध-अभाज्य संख्या क्या है।
एक अर्ध-अभाज्य संख्या वह संख्या है जिसका मान दो अलग-अलग अभाज्य संख्याओं का गुणनफल है।
एक उदाहरण लेते हैं,
21 = 3*7 एक अर्ध-अभाज्य संख्या है।
25 = 5*5 एक अर्ध-अभाज्य संख्या नहीं है।
अब, N से कम या बराबर अर्ध-अभाज्य संख्याओं का एक उदाहरण लेते हैं।
इनपुट: N = 15 आउटपुट: 6 10 14 15
इस समस्या को हल करने के लिए, हमें N से कम या बराबर प्रत्येक संख्या लेनी होगी और जांचना होगा कि क्या इसके ठीक दो अलग-अलग अभाज्य गुणनखंड हैं।
सुझाव - हम अपना एल्गोरिदम 6 से भी शुरू कर सकते हैं क्योंकि सबसे छोटी अर्ध-अभाज्य संख्या 6 है।
उदाहरण
#include <bits/stdc++.h> using namespace std; vector<int>generateSemiPrimeNumbers(int n){ int index[n + 1]; for (int i = 1; i <= n; i++) index[i] = i; int countDivision[n + 1]; for (int i = 0; i < n + 1; i++) countDivision[i] = 2; for (int i = 2; i <= n; i++) { if (index[i] == i && countDivision[i] == 2) { for (int j = 2 * i; j <= n; j += i) { if (countDivision[j] > 0) { index[j] = index[j] / i; countDivision[j]--; } } } } vector<int> semiPrime; for (int i = 2; i <= n; i++) { if (index[i] == 1 && countDivision[i] == 0) semiPrime.push_back(i); } return semiPrime; } int main(){ int n = 15; cout<<"Semi-prime numbers less that or equal to "<<n<<"are :\n"; vector<int>semiPrime = generateSemiPrimeNumbers(n); for (int i = 0; i < semiPrime.size(); i++) cout<<semiPrime[i]<<"\t"; return 0; } आउटपुट
15 से कम या बराबर अर्ध-अभाज्य संख्याएं हैं -
6 10 14 15