3) for
for(x=a, b, seq)
a, b是实数,从a 到 b 执行 seq, 步长是1
如果 a > b 则不执行
如果b 是 +∞,则循环是无限循环
GP > for(x=2.5, 3, print(x))
2.5
GP > for(x=2.5, 4, print(x))
2.5
3.5
可以用break跳出循环
GP> for(i=1,100,{print(i); if(i>=10,break())})
1
2
3
4
5
6
7
8
9
10
其他for函数:
forcomposite(n = a, b, seq)
对[a, b] 区间的合数执行 seq
gp > forcomposite(a=2, 10,print(a))
4
6
8
9
10
foroprime(n = a, b, seq
对[a, b] 区间的素数执行 seq
gp > forprime(n=2,10, print(n))
2
3
5
7
fordiv(n, d, seq)
对n的因子d执行 seq
gp > fordiv(100, d, print(d))
1
2
4
5
10
20
25
50
100
fordivfactored(n, d, seq)
对n进行分解,然后对n的所有因子和因子的分解执行seq
gp > fordivfactored(24, d, print(d))
[1, matrix(0,2)]
[2, Mat([2, 1])]
[3, Mat([3, 1])]
[4, Mat([2, 2])]
[6, [2, 1; 3, 1]]
[8, Mat([2, 3])]
[12, [2, 2; 3, 1]]
[24, [2, 3; 3, 1]]
gp > fordivfactored(24, d, print(eulerphi(d)))
1
1
2
2
2
4
4
8
forfactored(n = a, b, seq)
从a到b,对n和n的分解执行seq
gp > forfactored(n=2,10, print(n))
[2, Mat([2, 1])]
[3, Mat([3, 1])]
[4, Mat([2, 2])]
[5, Mat([5, 1])]
[6, [2, 1; 3, 1]]
[7, Mat([7, 1])]
[8, Mat([2, 3])]
[9, Mat([3, 2])]
[10, [2, 1; 5, 1]]
foreach(v, x, seq)
对v中每个元素x执行seq, v的类型是t_LIST, t_VEC,t_COL, t_MAT
如果类型是t_MAT,x是矩阵的行
gp > foreach(factor(24), d, print(d))
[2, 3]~
[3, 1]~ |