- 注册时间
 - 2008-2-6
 
- 最后登录
 - 1970-1-1
 
- 威望
 -  星
 
- 金币
 -  枚
 
- 贡献
 -  分
 
- 经验
 -  点
 
- 鲜花
 -  朵
 
- 魅力
 -  点
 
- 上传
 -  次
 
- 下载
 -  次
 
- 积分
 - 51605
 
- 在线时间
 -  小时
 
 
 
 
 
 
 | 
 
 楼主 |
发表于 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] 
 
 |   
 
 
 
 |