【发布时间】:2020-09-06 15:47:39
【问题描述】:
对于某个数字n,我必须找到比n 更大的下一个数字,这是素数。
我不得不在 Matlab 中解决这个问题。
以下是我的代码:
解决方案1
function k = next_prime(n)
while n<10000000000
n=n+1;
if isprime(n)==true
k=n;
break
end
end
end
这样问题就正确解决了,但我最初的解决方案是:
解决方案2
function k = next_prime(n)
while n<10000000000
n=n+1;
if isprime(n)==true
k=n;
end
break
end
end
Solution1 与 Solution2 之间的唯一区别是 break 语句位置。
为什么Solution1可以,Solution2不行?
【问题讨论】:
-
Protip:你仍然可以改进很多。使用一半计算时间的简单方法:你是
n=n+1,但偶数不能是质数,所以如果你从奇数开始,你可以n=n+2。 -
您也可以使用
while n<1e8 & ~isprime(n)。这或多或少地将break条件放在n上直接在循环条件中。 -
还有一个提示:与
true比较永远不会改变值,所以总是多余的。isprime(n)==true与isprime(n)完全相同。我认为后者的可读性更好。
标签: matlab loops while-loop primes break