[英]C++ Determine if K can be expressed as a sum of prime factors of N
所以我正在編寫一個程序來解決離心機問題,但我在算法的特定部分遇到了問題。 我需要取 2 個整數變量 N 和 K,並確定 K 是否可以表示為 N 的素因數之和。
例如 N = 21,K = 6:21 的質因數是 3 x 7。6 可以表示為 3 + 3,所以這是真的。 另一個例子 N = 21,K = 11。11 不能表示為 3 或 7 的任何組合,所以是錯誤的。
在我的程序中,我迄今為止解決這個問題的最佳想法是使用以下代碼找到 N 的質因數,然后將這些值存儲到一個向量中:
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;
}
問題是,我不知道如何獲取向量的項並確定我的 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;
}
我在這里假設向量F
中的所有因子都按升序排序。
但是,我懷疑您的分解功能無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.