你需要使用break。但首先,让我们清理一下演示文稿,这样它就更具可读性:
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() 将执行与原始函数相同的操作(只是它现在破坏了您想要的方式)。