- 注册时间
- 2008-2-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 51573
- 在线时间
- 小时
|
楼主 |
发表于 2023-11-22 17:47:04
|
显示全部楼层
3) for
for(x=a, b, seq)
a, b是实数,从a 到 b 执行 seq, 步长是1
如果 a > b 则不执行
如果b 是 +∞(b = oo ),则循环是无限循环
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
可以用next跳过当前循环进入下一个
gp > for(i=1,10,if(isprime(i), next, print(i)))
1
4
6
8
9
10
其他for函数:
forcomposite(n = a, b, seq)
对[a, b] 区间的合数执行 seq
gp > forcomposite(a=2, 10,print(a))
4
6
8
9
10
forprime(n = a, b, seq)
对[a, b] 区间的素数执行 seq
gp > forprime(n=2,10, print(n))
2
3
5
7
forprimestep(p = a, b, q, seq)
这里a, b都是unsigned long类型(32或者64位), p是素数, a <= p <= b
若q是t_INT,p满足p=a mod q
若q是t_INTMOD, q = Mod(c, N), 则Mod(p, N)=Mod(c, N)
gp > forprimestep(p = 4, 30, 5, print(p))
19
29
gp > forprimestep(p = 4, 30, Mod(1,5), print(p))
11
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]]
forsquarefree(N=a, b, seq)
无平方因子的N和N的分解[N, factor(N)]
gp > s=0;forsquarefree(n=1,100, s+=n[1]);s
%1 = 2967
gp > forsquarefree(n=1,10, print(n));
[1, matrix(0,2)]
[2, Mat([2, 1])]
[3, Mat([3, 1])]
[5, Mat([5, 1])]
[6, [2, 1; 3, 1]]
[7, Mat([7, 1])]
[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]~
forpart(X = k,seq,{a = k1},{n = k2})
X是满足x_1+x_2...+x_n = k的vec,如果可选项a=k1存在,则x_i最大是k1,如果可选项n=k2存在,则最多k2项
gp > forpart(X=4, print(X))
Vecsmall([4])
Vecsmall([1, 3])
Vecsmall([2, 2])
Vecsmall([1, 1, 2])
Vecsmall([1, 1, 1, 1])
gp > forpart(v=5,print(Vec(v)), 4, 3)
[1, 4]
[2, 3]
[1, 1, 3]
[1, 2, 2]
有2-4项,小于5,填充0
gp > forpart(v=5,print(Vec(v)),[0,5],[2,4])
[0, 0, 1, 4]
[0, 0, 2, 3]
[0, 1, 1, 3]
[0, 1, 2, 2]
[1, 1, 1, 2]
forperm(a, p, seq)
若a是t_INT,对1..a的全排列执行seq
若a是t_VECS,对a的全排列执行seq
gp > forperm(3, p, print(p))
Vecsmall([1, 2, 3])
Vecsmall([1, 3, 2])
Vecsmall([2, 1, 3])
Vecsmall([2, 3, 1])
Vecsmall([3, 1, 2])
Vecsmall([3, 2, 1])
gp > forperm([2,1,1,3], p, print(p))
Vecsmall([2, 1, 1, 3])
Vecsmall([2, 1, 3, 1])
Vecsmall([2, 3, 1, 1])
Vecsmall([3, 1, 1, 2])
Vecsmall([3, 1, 2, 1])
Vecsmall([3, 2, 1, 1])
forstep(X = a,b,s,seq)
a<=X<=b
若s是整数,则X=a, a+s, a+2s,a+3s......
若s是Mod(c, N),则Mod(X, N) = Mod(c, N)
若s是vec, 比如s = [1, 2]
则X = a, a+1, a+1+2, a+1+2+1, a+1+2+1+2...
gp > forstep(x=5, 10, 2, print(x))
5
7
9
gp > forstep(x=5, 10, Mod(1,3), print(x))
7
10
gp > forstep(x=5, 10, [1,2], print(x))
5
6
8
9
gp > forstep(x=5, 20, [1,2, 3], print(x))
5
6
8
11
12
14
17
18
20
forsubgroup(H = G,{bound},seq)
群G的阿贝尔子群,执行seq
forsubset(nk, s, seq)
若nk是整数,[1,2,3.....,nk]的所有子集执行seq
若nk=[n, k], [1,2,3.....,nk]的所有k个元素的子集执行seq
gp > forsubset([5,3], s, print(s))
Vecsmall([1, 2, 3])
Vecsmall([1, 2, 4])
Vecsmall([1, 2, 5])
Vecsmall([1, 3, 4])
Vecsmall([1, 3, 5])
Vecsmall([1, 4, 5])
Vecsmall([2, 3, 4])
Vecsmall([2, 3, 5])
Vecsmall([2, 4, 5])
Vecsmall([3, 4, 5])
gp > forsubset(3, s, print(s))
Vecsmall([])
Vecsmall([1])
Vecsmall([2])
Vecsmall([3])
Vecsmall([1, 2])
Vecsmall([1, 3])
Vecsmall([2, 3])
Vecsmall([1, 2, 3])
forvec(X = v,seq,{flag = 0})
v是n个[a_i, b_i]组成的,
函数生成n个元素的vec,每个元素v_i,都满足a_i<=v_i<=b_i
如果flag=1,vec中元素满足v_i<=v_j, i<j
如果flag=2,vec中元素满足v_i<v_j, i<j
gp > forvec (X=[[0,1],[-1,1]], print(X));
[0, -1]
[0, 0]
[0, 1]
[1, -1]
[1, 0]
[1, 1]
gp > forvec (X=[[0,1],[-1,1]], print(X), 1);
[0, 0]
[0, 1]
[1, 1]
? forvec (X=[[0,1],[-1,1]], print(X), 2)
[0, 1]
gp > forvec (X=[[0,2],[-1,1], [2, 4]], print(X));
[0, -1, 2]
[0, -1, 3]
[0, -1, 4]
[0, 0, 2]
[0, 0, 3]
[0, 0, 4]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[1, -1, 2]
[1, -1, 3]
[1, -1, 4]
[1, 0, 2]
[1, 0, 3]
[1, 0, 4]
[1, 1, 2]
[1, 1, 3]
[1, 1, 4]
[2, -1, 2]
[2, -1, 3]
[2, -1, 4]
[2, 0, 2]
[2, 0, 3]
[2, 0, 4]
[2, 1, 2]
[2, 1, 3]
[2, 1, 4]
gp > forvec (X=[[0,2],[-1,1], [2, 4]], print(X), 1);
[0, 0, 2]
[0, 0, 3]
[0, 0, 4]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[1, 1, 2]
[1, 1, 3]
[1, 1, 4]
gp > forvec (X=[[0,2],[-1,1], [2, 4]], print(X), 2);
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
|
|