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 矩阵,其中 n
是 p
的素数。第一列是主要因素。第二列是他们的多重性。
所以你只需要找到第一列的最大元素。可以这样操作:
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
。
我是 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 矩阵,其中 n
是 p
的素数。第一列是主要因素。第二列是他们的多重性。
所以你只需要找到第一列的最大元素。可以这样操作:
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
。