【问题标题】:Break statement in MatlabMatlab中的break语句
【发布时间】: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

Solution1Solution2 之间的唯一区别是 break 语句位置。 为什么Solution1可以,Solution2不行?

【问题讨论】:

  • Protip:你仍然可以改进很多。使用一半计算时间的简单方法:你是n=n+1,但偶数不能是质数,所以如果你从奇数开始,你可以n=n+2
  • 您也可以使用while n&lt;1e8 &amp; ~isprime(n)。这或多或少地将break 条件放在n 上直接在循环条件中。
  • 还有一个提示:与true 比较永远不会改变值,所以总是多余的。 isprime(n)==trueisprime(n) 完全相同。我认为后者的可读性更好。

标签: matlab loops while-loop primes break


【解决方案1】:

MATLAB 中的break 语句

终止 for 或 while 循环的执行。 break 语句之后的循环中的语句不执行。

在解决方案 2 中,您保证在每次循环迭代时都会中断,不仅是在它是素数的情况下。因此它总是只会运行一次循环,将 n 设置为 n+1,然后在不设置 k 的情况下中断(除非巧合的是 n+1 是素数)。

如果你修复你的缩进它可能会帮助你看到它:

function k = next_prime(n)
    while n<10000000000

        n=n+1;

        if isprime(n)==true      
            k=n;
        end

        break

    end
end

所以循环做了 3 件事,它递增 n,它检查 n 是否是素数,然后它总是退出。

在解决方案 1 中,您只需退出 如果 n 是素数,这显然是您想要的。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2018-03-14
    • 2014-01-07
    • 2021-04-27
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多