4

我想分解(这些)大数字,而 Matlab 做得很好。(这些是结果。)

factor(NumberOfTypeSym) 的结果是另一个符号对象:

>> factor( sym('79228162514264337589248983040') )

ans =

2^32*3*5*17*257*641*65537*6700417

但我对此无能为力,只能看看它。

有没有办法访问单个素数和指数?

(这超出了我的理解,为什么他们不会只给我一个 nx2 矩阵,左边是素数,右边是指数。)

我现在特别需要的是结果中素数的数量,即所有指数的总和。

4

4 回答 4

3

简单的是使用我的vpi工具,在文件交换中找到。这将返回整数的直接列表。

x=factor(vpi('79228162514264337589248983040'))
x =
Columns 1 through 7
          2     2     2     2     2     2     2
Columns 8 through 14
          2     2     2     2     2     2     2
Columns 15 through 21
          2     2     2     2     2     2     2
Columns 22 through 28
          2     2     2     2     2     2     2
Columns 29 through 35
          2     2     2     2     3     5    17
Columns 36 through 39
        257   641   65537   6700417

vpi 的替代品(基本上已准备好发布)是 vpij,它花费了一半的时间来分解该数字,但 vpij 可以处理比 vpi 大得多的数字。事实上,最后要写的是 factor 的一个更加改进的版本,但我可能会在此之前发布 vpij。

当然,这些因子也必须是精度可变的整数,因为其中一些因子会非常大。这是最近有人在数学网站上评论的 50 多位数字。

N = vpij(84)^27 + 1
N =
    9026943488964407632833018690186861978797224381906945

x = factor(N)
x =
   5   17   19  109  367  757  2017  230077  397741265470599434164843152148837
于 2013-08-03T18:19:56.520 回答
3

这个怎么样 :

>> x=factor( sym('79228162514264337589248983040') )

x =

2^32*3*5*17*257*641*65537*6700417

>> p=char(x)

p =

2^32*3*5*17*257*641*65537*6700417

>> s=regexp(p,'*','split')

s = 

    '2^32'    '3'    '5'    '17'    '257'    '641'    '65537'    '6700417'

>> exp=regexp(s{1},'\^','split')

exp = 

    '2'    '32'
>> [exp s(2:end)]

ans = 

    '2'    '32'    '3'    '5'    '17'    '257'    '641'    '65537'    '6700417'

现在玩这些字符,根据需要将它们转换为数字。

于 2013-08-03T11:35:24.693 回答
1

只是 P0W 提供的答案的扩展:

function [ y ] = symfactor2mat( x )

    Str = char(x) ;

    Parts = regexp(Str,'*','split') ;

    Long = length(Parts) ;

    Mat = sym(ones(Long,2)) ;

    for m=1:Long
        Part = Parts{m} ;
        if isempty(strfind( Part, '^' ))
            Mat(m,1) = sym(Part) ;
        else
            PE = regexp(Part,'\^','split') ;  % prime and exponent
            Mat(m,1) = sym(PE{1}) ;
            Mat(m,2) = sym(PE{2}) ;
        end
    end

    y = Mat ;

end
于 2013-08-24T14:31:36.270 回答
0

只是添加另一个选项:

N = sym('79228162514264337589248983040');
F = children(factor(N));
primefactors = F(2:2:end)

  primefactors =

  [ 2, 3, 5, 17, 257, 641, 65537, 6700417]

multiplicities = F(3:2:end)

  multiplicities =

  [ 32, 1, 1, 1, 1, 1, 1, 1]

sum(multiplicities)

  ans =

  39

或者,利用MuPAD 文档中的一个函数,

feval(symengine, 'numlib::Omega', N)

  ans =

  39
于 2013-11-12T07:58:42.050 回答