>
এই সমস্যাটি সমাধান করার আগে, আসুন জেনে নেওয়া যাক সেমি-প্রাইম সংখ্যা কী।
একটি আধা-প্রধান সংখ্যা একটি সংখ্যা যার মান দুটি স্বতন্ত্র মৌলিক সংখ্যার গুণফল।
একটি উদাহরণ নেওয়া যাক,
21 =3*7 একটি সেমিপ্রাইম সংখ্যা।
25 =5*5 একটি সেমিপ্রাইম সংখ্যা নয়।
এখন, n এর থেকে কম বা সমান সেমিপ্রাইম সংখ্যার একটি উদাহরণ নেওয়া যাক।
Input: N = 15 Output: 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