C++ C++;确定K是否可以表示为N的素数因子之和
因此,我正在编写一个程序来解决这个问题,而我的算法的某个特定部分遇到了问题。我需要取两个整数变量N和K,并确定K是否可以表示为N的素数因子之和 例如,N=21,K=6:21的素数因子是3x7。6可以表示为3+3,所以这是真的。 另一个例子是N=21,K=11。11不能表示为3或7的任何组合,因此为假 在我的程序中,我迄今为止解决这个问题的最好办法是使用以下代码找到N的素因子,然后将值存储到向量中:C++ C++;确定K是否可以表示为N的素数因子之和,c++,algorithm,C++,Algorithm,因此,我正在编写一个程序来解决这个问题,而我的算法的某个特定部分遇到了问题。我需要取两个整数变量N和K,并确定K是否可以表示为N的素数因子之和 例如,N=21,K=6:21的素数因子是3x7。6可以表示为3+3,所以这是真的。 另一个例子是N=21,K=11。11不能表示为3或7的任何组合,因此为假 在我的程序中,我迄今为止解决这个问题的最好办法是使用以下代码找到N的素因子,然后将值存储到向量中: vector<int> PrimeFactors(int n) { vecto
vector<int> PrimeFactors(int n)
{
vector<int> factors;
while (n % 2 == 0)
{
factors.push_back(2);
n = n / 2;
}
for (int i = 3; i <= sqrt(n); i = i + 2)
while (n % i == 0)
{
factors.push_back(i);
n = n / i;
}
if (n > 2)
factors.push_back(n);
return factors;
}
向量素数因子(int n)
{
矢量因子;
而(n%2==0)
{
因素。推回(2);
n=n/2;
}
对于(int i=3;i 2)
因子。推回(n);
回报因素;
}
问题是,我不知道如何获取向量项并确定我的K值是否可以表示为这些值的总和
谁能给我一个正确的方向,或者建议一个更好的方法来解决我问题的这一部分?你可以使用递归:
bool isSum(const std::vector<int>& F, const int K)
{
for (const auto& f: F)
{
if (f > K)
{
break;
}
else if (f == K)
{
return true;
}
else if (f < K)
{
if (isSum(F, K - f))
{
return true;
}
}
}
return false;
}
bool isSum(const std::vector&F,const int K)
{
用于(常数自动&f:f)
{
如果(f>K)
{
打破
}
else如果(f==K)
{
返回true;
}
else if(f
这里我假设向量F
中的所有因子都是按递增顺序排序的
但是,我怀疑你的因式分解函数不能正常工作。你的问题由两部分组成,第一部分是找到你找到的
n
的素因子,第二部分是确定它们是否满足你的需要?您已经为第一部分编写了代码,因此可以尝试使用动态编程解决第二部分