用 C++ 列印所有小於等於 N 的半素數


在這個問題中,我們給定一個整數 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

更新於: 2020年1月17日

359 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.