Java 这两种检查数字是否为素数的方法有什么区别?

Java 这两种检查数字是否为素数的方法有什么区别?,java,return,Java,Return,我写了一个检查数字是否为素数的方法: static boolean isPrime(int x) { for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) return false; } return true; } static boolean isPrime(int x){ 对于(int i=2;i两种解

我写了一个检查数字是否为素数的方法:

static boolean isPrime(int x) {
        for (int i = 2; i <= Math.sqrt(x); i++) {
            if (x % i == 0)
                return false;    
        }
        return true;
    }
static boolean isPrime(int x){

对于(int i=2;i两种解决方案都有效,并且都适用于您已经确定的所有原因。良好的分析。正如其他人所指出的,这些差异纯粹是风格上的差异。下面是一个示例

就性能而言,我不希望这两种方法之间存在显著差异。但如果您想确定,请执行基准测试。如果您想真正提高性能,可以通过替换以下内容来消除对
Math.sqrt()
的昂贵调用:

for (int i = 2; i <= Math.sqrt(x); i++) {

for(int i=2;i这主要是风格的问题。一些编码约定规定一个方法只有一个
return
语句。这在必须显式释放资源的语言中很有意义,但在Java中没有任何功能影响


就个人而言,我更喜欢在您知道结果后立即返回(如第一个代码片段中所示),但同样,这是个人风格的问题。

第二种方法更具可读性,也更容易理解。就性能而言,两种方法都是相同的。不,这只是风格的问题。唯一的区别是正式的解决方案对于初学者来说更容易理解。就我看来,在运行时或内存方面没有真正的区别消耗。我实际上更喜欢第一种方法。第二种方法看起来不必要的臃肿。早期退出在大函数中可能会令人困惑,但我认为在小函数中它更具可读性。每当我编写一个简单的素数查找函数时,它几乎总是看起来像您的版本。或者在循环外调用sqrt一次并缓存结果以获得ev嗯,速度更快。但仍然无法和最先进的prime测试仪相匹敌^^
for (int i = 2; i <= Math.sqrt(x); i++) {
for (int i = 2; i*i <= x; i++) {