Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm xem n có thể được viết dưới dạng tích của k số trong C ++ hay không

Giả sử chúng ta có một số N. Chúng ta có một số k khác. Chúng ta phải kiểm tra xem số có thể được biểu diễn bằng k số hay không. Giả sử một số 54 và k =3, sau đó nó sẽ in ra các số như [2, 3, 9], nếu nó không thể được biểu diễn, thì hãy in ra.

Để giải điều này, chúng ta sẽ tìm tất cả các thừa số nguyên tố của N, và lưu chúng vào một vector, sau đó để tìm k số lớn hơn 1, chúng ta kiểm tra kích thước của vector có lớn hơn k hay không. Nếu kích thước nhỏ hơn k, thì trả về -1, nếu không thì in k-1 thừa số đầu tiên và thừa số cuối cùng sẽ là tích của tất cả các số còn lại.

Ví dụ

#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);
}

Đầu ra

2, 3, 9