如果我使用多行嵌套 for 循环,如何移动到 PARI/GP 中的下一个循环?
how to move to the next loop in PARI/GP if I use multi-line nested for loops?
我的问题是:如果我使用多行嵌套 for 循环,如何移动到 PARI/GP 中的下一个循环?例如:
如果我使用此代码:
for(K=1,10,for(i=1,5,if(isprime(2*i*prime(K)+1)==1,print(2*i"*"prime( K)))))
并且由于 2*(i=1)*prime(K=1)+1=5 是素数,我需要我的机器不要循环 i=2......i=5,我需要它移动到下一个 K,所以:
如何在 PARI/GP 上执行此操作?
如果我的问题不清楚或重复,我很抱歉。
你需要使用中断。但首先,让我们整理一下演示文稿,使其更具可读性:
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1)==1,
print(2*i"*"prime(K))
)
)
);
}
func()
您想跳出最内层的循环,像这样(只给出函数本身):
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1)==1,
print(2*i"*"prime(K));
break
)
)
);
}
但是既然我们在这里,就没有必要添加 == 1
; if
已经在非零值上分支。
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1),
print(2*i"*"prime(K));
break
)
)
);
}
我们还可以存储 prime(K) 的值,这样我们就不需要计算它两次。但更好的是,让我们直接在素数上使用循环,这样我们根本不需要 prime()
函数!
func(maxK=10)=
{
my(K=0);
forprime(p=2,prime(maxK),
K++;
for(i=1,5,
if(isprime(2*i*p+1),
print(2*i"*"p);
break
)
)
);
}
我在这里更改了函数,因此您可以使用 10 以外的不同最大值调用它,并且我保留了索引以备不时之需。但我认为更好的方法是限制你想直接进入素数的高度,而完全忘记素数索引:
func(maxP=29)=
{
forprime(p=2,maxP,
for(i=1,5,
if(isprime(2*i*p+1),
print(2*i"*"p);
break
)
)
);
}
在这两种情况下,我都添加了一个默认参数,因此调用 func()
将执行与您的原始函数相同的操作(除了它现在打破了您想要的方式)。
我的问题是:如果我使用多行嵌套 for 循环,如何移动到 PARI/GP 中的下一个循环?例如:
如果我使用此代码:
for(K=1,10,for(i=1,5,if(isprime(2*i*prime(K)+1)==1,print(2*i"*"prime( K)))))
并且由于 2*(i=1)*prime(K=1)+1=5 是素数,我需要我的机器不要循环 i=2......i=5,我需要它移动到下一个 K,所以:
如何在 PARI/GP 上执行此操作?
如果我的问题不清楚或重复,我很抱歉。
你需要使用中断。但首先,让我们整理一下演示文稿,使其更具可读性:
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1)==1,
print(2*i"*"prime(K))
)
)
);
}
func()
您想跳出最内层的循环,像这样(只给出函数本身):
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1)==1,
print(2*i"*"prime(K));
break
)
)
);
}
但是既然我们在这里,就没有必要添加 == 1
; if
已经在非零值上分支。
func()=
{
for(K=1,10,
for(i=1,5,
if(isprime(2*i*prime(K)+1),
print(2*i"*"prime(K));
break
)
)
);
}
我们还可以存储 prime(K) 的值,这样我们就不需要计算它两次。但更好的是,让我们直接在素数上使用循环,这样我们根本不需要 prime()
函数!
func(maxK=10)=
{
my(K=0);
forprime(p=2,prime(maxK),
K++;
for(i=1,5,
if(isprime(2*i*p+1),
print(2*i"*"p);
break
)
)
);
}
我在这里更改了函数,因此您可以使用 10 以外的不同最大值调用它,并且我保留了索引以备不时之需。但我认为更好的方法是限制你想直接进入素数的高度,而完全忘记素数索引:
func(maxP=29)=
{
forprime(p=2,maxP,
for(i=1,5,
if(isprime(2*i*p+1),
print(2*i"*"p);
break
)
)
);
}
在这两种情况下,我都添加了一个默认参数,因此调用 func()
将执行与您的原始函数相同的操作(除了它现在打破了您想要的方式)。