【问题标题】:Is there a way to find the number of prime factors of a given integer?有没有办法找到给定整数的质因子数?
【发布时间】:2017-12-20 00:15:54
【问题描述】:

我正在尝试实现一个函数来分解一个数字,到目前为止我有这个代码:

int * factor(int n) {
  int * vet;
  //
  int p = 2;
  int index = 0;
  while(n > 1) {
    while(n % p != 0) {
      p++;
      index++;
    }
    n = n / p;
    vet[index]++;
  }
  return vet;
}

这个函数应该返回一个数组,其中包含数字n 的每个素数的幂。像这样:

如果 1200 = 2x2x2x2x3x5x5,则 1200 = 2^4 + 3^1 + 5^1,因此如果参数为 1200,则函数应返回数组 {4,1,0,3}。

如果 440 = 2x2x2x5x11,则 440 = x^3 + 5^1 + 11^1,该函数应返回数组 {3,0,0,1,0,0,0,0,0, 1}

我的问题是在我开始分解过程之前是否存在某种方法来确定vet 的大小,在while 循环中。

另外,使用这个结果数组(或上面概念的一些变体),是否有可能找到这个数字的 2 的幂?例如:

440 = 1x2^8 + 1x2^7 + 0x2^6 + 1x2^5 + 1x2^4 + 1x2^3 + 0x2^2 + 0x2^1 + 0x2^0 产生数组 {1,1,0,1,1,1,0,0,0}

1200 = 1x2^10 + 0x2^9 + 0x2^8 + 1x2^7 + 0x2^6 + 1x2^5 + 1x2^4 + 0x2^3 + 0x2^2 + 0x2^1 + 0x2^0 产生数组 {1,0,0,1,0,1,1,0,0,0,0}

【问题讨论】:

  • 首先,vet 是一个未初始化的变量,您的代码通过访问它会表现出未定义的行为。
  • 如果您的代码有具体问题,请提供minimal reproducible example 进行演示。如果您没有具体问题,那么您希望得到什么样的答案? StackOverflow 不是免费的代码编写服务。如果这是一个家庭作业,你可能会发现这个很有趣meta.stackoverflow.com/questions/334822/…
  • std::vector<int> vet;。现在你的问题少了。
  • @IgorTandetnik 但是如果我不能在这里使用std:vetor,问题仍然存在;真的不可能为此分配一个数组,找到一个长度值吗?

标签: algorithm prime-factoring


【解决方案1】:

一个最快的简单解决方案:

void getFactors(int n)
{
    while (n%2 == 0)
    {
        n = n/2;
    }

    for (int i = 3; i * i <= n; i = i+2)
    {
        // While i divides n, print i and divide n
        while (n%i == 0)
        {  
            std::cout<<i<<std::endl;
            n = n/i;
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2016-05-29
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多