假设我们有一个数字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