【问题标题】:PARI/GP: How to get the max prime factor of the integer?PARI / GP:如何获得整数的最大素数?
【发布时间】:2016-09-05 20:42:51
【问题描述】:

我是 pari/gp 的新手。我使用factorint 来查找所有素因子并返回一个矩阵。 我试图遍历矩阵以找到内部的最大数字,但无法找到行和列的长度。另外,我如何使用 if 来比较每个元素的高低。我的p 正在顶部生成。

temp = factorint(p-1);
num = 0;
for(i=1, size,
    for(j=1, size,
        if(num <= temp[i,j], num = temp[i,j]);
    );
);

print("number is = "  num);

提前致谢。

【问题讨论】:

    标签: pari-gp pari


    【解决方案1】:

    请注意,factorint(p) 始终返回 nx2 矩阵,其中 np 的质因子数。第一列是主要因素。第二列是它们的多样性。

    所以你只需要找到第一列的最大元素。可以这样做:

    factors = factorint(p-1);
    print("number is = ", vecmax(factors[, 1]));
    

    顺便说一下,向量v的长度在PARI/GP中只是#v

    【讨论】:

    • 会不会出现最大素数不是最后一行的情况?那么factors[matsize(factors)[1],1]就可以使用了。
    • 假设 p - 1 > 1,那么factors 是一个非空矩阵,它的第一列只包含素数,它们按升序排列。在这些假设下,您的评论和答案是正确的。
    【解决方案2】:

    除了matsize,您还可以使用#。例如, factorint(30) 给出一个 3x2 矩阵;

    [2 1]
    
    [3 1]
    
    [5 1]
    

    #factorint(30) 给出该矩阵的列数(即 2)。 通过transposing矩阵,得到的矩阵有3列,也就是30个不同的质因数。 可以按如下方式进行转置:将~ 附加到矩阵中。 所以我们可以做 #factorint(30)~ 得到不同质因数的数量; 打印出来的

    [2 3 5]
    
    [1 1 1]
    

    由于这些素数在第一行中的顺序会越来越多,因此第一行中的最后一个是最大的 factorint(30)[#factorint(30)~, 1] 给出最大的质因数 30; 5 现在你可以避免两次因式分解 30;

    f = factorint(30); f[#f~]
    

    根据需要获取5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2014-03-10
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多