质因数分解
这个例子展示了如何使用一些基本功能信谊
使用符号数学工具箱™对象。
内置的整数类型的MATLAB®适合整数小于2 ^ 64。然而,我们想开展统计调查的质因数分解较大的整数。要做到这一点,我们用符号整数,因为他们的规模是无限的。调查之间的整数
和
,在那里
。内置的数据类型不能准确地存储这些价值。因此,包装的数量信谊
用符号表示的计算。这避免了舍入或溢出错误:
N0 = 3 *符号(10)^ 23;disp ([“双打:Roundng错误”char (3 * 10 ^ 23 - N0)]);
Roundng误差双打:-25165824
disp ([的整数溢出错误:char (3 * uint64 (10) ^ 23 - N0)]);
为整数溢出错误:-299981553255926290448385
在算术操作,象征性的数字可以结合双打和转换发生在操作之前。因此,不能引起舍入误差以下定义:
一个= N0 + (1:10 0);
计算元素的质因数分解一个
使用因素
。数量的主要因素不同。数组不能包含不同长度的向量,但是细胞数组。为了避免内存的仓位调整,首先初始化单元阵列,然后计算分解在一个循环中:
Bcell =细胞(100);为i = 1:10 0 Bcell{我}=因素((i));结束
一个更有效的方法是使用arrayfun
。设置UniformOutput
来假
作为一个单元阵列返回结果。
Bcell = arrayfun (@factor,“UniformOutput”、假);
例如,第一个质因数分解:
Bcell {1:5}
ans =
ans =
ans =
ans =
ans =
获得最大的质数因子使用马克斯
。注意,如果输出包含符号对象,选择UniformOutput
总是被设置假
即使输出是统一的。
Mcell = cellfun (@max Bcell,“UniformOutput”、假);
例如,第一个最大的主要因素是:
Mcell {1:5}
ans =
ans =
ans =
ans =
ans =
细胞数组转换成一个象征性的向量,并研究了比例最大长度的主要因素,作为一个整体。您可以应用算术操作elementwise符号向量,在双打的一样。注意,大多数统计功能需要双精度数他们的论点。
M = [Mcell {}):;柱状图(双(log (M)。/ log ()), 20);标题(长度的比率最大的质数因子和数量);
以同样的方式,现在调查的数量分布的主要因素。在这里,结果包含统一的数字数据。因此,您不需要设置UniformOutput
来假
。
ω= cellfun (@numel Bcell);直方图(ω);标题(的主要因素);
间隔在调查中包含两个质数:
(ω= = 1)
ans =
我们检查最大的主要因素是同样经常在渣类1和3模4。注意,方程的对称对象符号对象本身,而不是逻辑值;我们必须把他们之前和他们:
总和(逻辑(mod (M, 4) = = 1))
ans = 49
总和(逻辑(mod (M, 4) = = 3))
ans = 51