Octave 如何计算一个数字的所有倍频程因子(不仅仅是素数因子)?
我是一个开始的倍频程用户,我想计算一个数字的所有整数因子,例如,对于数字120,我想得到1,2,3,4,5,6,8,10,12,15,20,24,30,40,60和120Octave 如何计算一个数字的所有倍频程因子(不仅仅是素数因子)?,octave,Octave,我是一个开始的倍频程用户,我想计算一个数字的所有整数因子,例如,对于数字120,我想得到1,2,3,4,5,6,8,10,12,15,20,24,30,40,60和120 我知道倍频程有因子函数,但这只给出素数因子分解。我想要所有的整数除数。我不认为有一个内置的函数,所以您需要编写一个。由于每个因子都是素因子子集的乘积,因此可以使用一些内置函数来构建所需的结果 函数rslt=allfactors(N) %#返回输入N的所有整数除数 %#如果N=0,则返回0 %#如果N
我知道倍频程有
因子
函数,但这只给出素数因子分解。我想要所有的整数除数。我不认为有一个内置的函数,所以您需要编写一个。由于每个因子都是素因子子集的乘积,因此可以使用一些内置函数来构建所需的结果
函数rslt=allfactors(N)
%#返回输入N的所有整数除数
%#如果N=0,则返回0
%#如果N<0,则返回-N的整数除数
如果N==0
rslt=N;
返回
结束
如果N<0
N=-N;
结束
x=系数(N)';%获取所有素因子,将它们转换为列向量的
rslt=[];%#创建一个空向量来保存结果
对于k=2:(长度(x)-1)
rslt=[rslt;唯一(prod(nchoosek(x,k),2))];
%#nchoosek(x,k)返回k个素数因子的每个组合
%#prod(…,2)计算每行的乘积
%#unique(…)将拉出唯一的成员
%#rslt=[rslt…]是将元素附加到向量的方便速记
结束
rslt=sort([1;unique(x);rslt;N])%#加入平凡因子和素数因子,对列表进行排序
结束
我想这就是你要找的东西。
希望它能有用
MATLAB/倍频程
以下是输出:
>> fact(12)
There are 6 factors for 12.
1 2 3 4 6 12
>> fact(28)
There are 6 factors for 28.
1 2 4 7 14 28
>> fact(64)
There are 7 factors for 64.
1 2 4 8 16 32 64
>>fact(53)
There are 2 factors for 53.
1 53
只需使用“除数”:
的可能重复项,它提供了获取单个数字的所有因子以及某个范围内每个数字的所有因子的方法。这看起来像是对的一个非常轻微的修改,如果是的话,您应该给予充分的信任。@Ben-您是对的,它几乎是相同的。不过,我以前没见过其他问题。我很高兴地看到,在如何简单有效地执行此计算方面,我与b3达到了相同的位置。
>> fact(12)
There are 6 factors for 12.
1 2 3 4 6 12
>> fact(28)
There are 6 factors for 28.
1 2 4 7 14 28
>> fact(64)
There are 7 factors for 64.
1 2 4 8 16 32 64
>>fact(53)
There are 2 factors for 53.
1 53
divisors(sym(120))
ans = (sym) [1 2 3 4 5 6 8 10 12 15 20 24 30 40 60 120] (1×16 matrix)