在 C++ 中判斷 n 是否可以寫成 k 個數的乘積


假設我們有一個數字 N。我們還有另一個數字 k。我們必須檢查該數字是否可以使用 k 個數字表示。假設一個數字 54,k = 3,那麼它將列印類似 [2, 3, 9] 的數字,如果它不能被表示,則打印出來。

為了解決這個問題,我們將找到 N 的所有質因數,並將它們儲存到一個向量中,然後為了找到 k 個大於 1 的數字,我們檢查向量的尺寸是否大於 k。如果尺寸小於 k,則返回 -1,否則列印前 k-1 個因子,最後一個因子將是所有剩餘數字的乘積。

示例

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
   int getKFactors(int n, int k){
   int i;
   vector<int> vec;
   while(n % 2 == 0){
      vec.push_back(2);
      n = n/2; //reduce n by dividing this by 2
   }
   for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers
      while(n % i == 0){
         n = n/i;
         vec.push_back(i);
      }
   }
   if(n > 2){
      vec.push_back(n);
   }
   if(vec.size() < k){
      cout << "Cannot be represented";
         return -1;
   }
   for (int i=0; i<k-1; i++)
   cout << vec[i] << ", ";
   int prod = 1;
   for (int i=k-1; i<vec.size(); i++)
   prod = prod*vec[i];
   cout << prod << endl;
}
int main() {
   int n = 54, k = 3;
   getKFactors(n, k);
}

輸出

2, 3, 9

更新於: 2019年11月1日

125 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.