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