Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ตัวเลขกึ่งนายกทั้งหมดที่น้อยกว่าหรือเท่ากับ N ใน C++


ในปัญหานี้ เราได้รับจำนวนเต็ม N และเราต้องพิมพ์ตัวเลขกึ่งไพรม์ทั้งหมดที่น้อยกว่าหรือเท่ากับ N

ก่อนแก้ปัญหานี้ เรามาทำความเข้าใจว่าจำนวนกึ่งไพรม์คืออะไร

เลขกึ่งเฉพาะ เป็นตัวเลขที่มีค่าเป็นผลคูณของจำนวนเฉพาะที่แตกต่างกันสองจำนวน

มาดูตัวอย่างกัน

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