PARI/GP: 如何得到整数的最大质因数?

PARI/GP: How to get the max prime factor of the integer?

我是 pari/gp 的新手。我使用 factorint 找到所有素因子,它 returns 是一个矩阵。 我试图遍历矩阵以找到其中最大的数字,但无法找到行和列的长度。另外我如何使用 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);

提前致谢。

请注意,factorint(p) 总是 returns nx2 矩阵,其中 np 的素数。第一列是主要因素。第二列是他们的多重性。

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

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

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

除了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