主要内容

质因数分解

这个例子展示了如何使用一些基本功能信谊使用符号数学工具箱™对象。

内置的整数类型的MATLAB®适合整数小于2 ^ 64。然而,我们想开展统计调查的质因数分解较大的整数。要做到这一点,我们用符号整数,因为他们的规模是无限的。调查之间的整数 N 0 + 1 N 0 + 1 0 0 ,在那里 N 0 = 3 * 1 0 2 3 。内置的数据类型不能准确地存储这些价值。因此,包装的数量信谊用符号表示的计算。这避免了舍入或溢出错误:

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 =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         13
                       
                      
                      
                       
                        
                         43
                       
                      
                      
                       
                        
                         233年
                       
                      
                      
                       
                        
                         2303316007278478583
                       
                      
                     
                    
                    
                     )
                   
                  
                 
ans =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         2
                       
                      
                      
                       
                        
                         17
                       
                      
                      
                       
                        
                         173年
                       
                      
                      
                       
                        
                         991年
                       
                      
                      
                       
                        
                         1223年
                       
                      
                      
                       
                        
                         244939年
                       
                      
                      
                       
                        
                         171805943
                       
                      
                     
                    
                    
                     )
                   
                  
                 
ans =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         3
                       
                      
                      
                       
                        
                         11
                       
                      
                      
                       
                        
                         47
                       
                      
                      
                       
                        
                         139年
                       
                      
                      
                       
                        
                         2531年
                       
                      
                      
                       
                        
                         549797184491917
                       
                      
                     
                    
                    
                     )
                   
                  
                 
ans =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         2
                       
                      
                      
                       
                        
                         2
                       
                      
                      
                       
                        
                         330131年
                       
                      
                      
                       
                        
                         2953837
                       
                      
                      
                       
                        
                         76910994983
                       
                      
                     
                    
                    
                     )
                   
                  
                 
ans =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         5
                       
                      
                      
                       
                        
                         6271年
                       
                      
                      
                       
                        
                         2650266823
                       
                      
                      
                       
                        
                         3610146697
                       
                      
                     
                    
                    
                     )
                   
                  
                 

获得最大的质数因子使用马克斯。注意,如果输出包含符号对象,选择UniformOutput总是被设置即使输出是统一的。

Mcell = cellfun (@max Bcell,“UniformOutput”、假);

例如,第一个最大的主要因素是:

Mcell {1:5}
ans =
                 
                  
                   
                    2303316007278478583
                  
                 
ans =
                 
                  
                   
                    171805943
                  
                 
ans =
                 
                  
                   
                    549797184491917
                  
                 
ans =
                 
                  
                   
                    76910994983
                  
                 
ans =
                 
                  
                   
                    3610146697
                  
                 

细胞数组转换成一个象征性的向量,并研究了比例最大长度的主要因素,作为一个整体。您可以应用算术操作elementwise符号向量,在双打的一样。注意,大多数统计功能需要双精度数他们的论点。

M = [Mcell {}):;柱状图(双(log (M)。/ log ()), 20);标题(长度的比率最大的质数因子和数量);

图包含一个坐标轴对象。坐标轴对象与标题长度的比率最大的质数因子和包含一个直方图类型的对象。

以同样的方式,现在调查的数量分布的主要因素。在这里,结果包含统一的数字数据。因此,您不需要设置UniformOutput

ω= cellfun (@numel Bcell);直方图(ω);标题(的主要因素);

图包含一个坐标轴对象。坐标轴对象与标题的主要因素包含一个直方图类型的对象。

间隔在调查中包含两个质数:

(ω= = 1)
ans =
                 
                  
                   
                    
                     (
                    
                     
                      
                       
                        
                         300000000000000000000037
                       
                      
                      
                       
                        
                         300000000000000000000049
                       
                      
                     
                    
                    
                     )
                   
                  
                 

我们检查最大的主要因素是同样经常在渣类1和3模4。注意,方程的对称对象符号对象本身,而不是逻辑值;我们必须把他们之前和他们:

总和(逻辑(mod (M, 4) = = 1))
ans = 49
总和(逻辑(mod (M, 4) = = 3))
ans = 51