在 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP