簡體   English   中英

C++ 確定 K 是否可以表示為 N 的質因數之和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM