有没有办法找到给定整数的质因子数?
Posted
技术标签:
【中文标题】有没有办法找到给定整数的质因子数?【英文标题】: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 进行演示。如果您没有具体问题,那么您希望得到什么样的答案? *** 不是免费的代码编写服务。如果这是一个家庭作业,你可能会发现这个很有趣meta.***.com/questions/334822/…
std::vector<int> vet;
。现在你的问题少了。
@IgorTandetnik 但是如果我不能在这里使用std:vetor
,问题仍然存在;真的不可能为此分配一个数组,找到一个长度值吗?
【参考方案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;
【讨论】:
以上是关于有没有办法找到给定整数的质因子数?的主要内容,如果未能解决你的问题,请参考以下文章
输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )