小编Wol*_*olo的帖子

计算找到第一个'n'素数的时间复杂度

找到第一个'n'素数的算法是:

while (number <= n) {
  boolean isPrime = true; 
  for (int divisor = 2; divisor <= (int)(Math.sqrt(number)); divisor++) {
    if (number % divisor == 0) {
      isPrime = false;      
      break;
    }
  }
  if(isPrime) 
    System.out.print(number + " ");
}
Run Code Online (Sandbox Code Playgroud)

这本书"Java编程简介"计算了这个算法的big-O:

由于在for循环中需要√i步骤来检查数字i是否为素数,因此算法采用√2+√3+√4+ ... +√n步骤来找到小于或等于n的所有素数.

观察,

√2+√3+√4+ ... +√n<=n√n

因此,该算法的时间复杂度为O(n√n).

阙:

1.他说,"它需要√i中的步骤for循环,以检查是否数字我是总理".

你不认为它应该是(√i-1)步骤.

2.请解释

√2+√3+√4+ ... +√n<=n√n

(我知道如果你用随机数替换'n',这种关系就成立了.我需要解释)

algorithm big-o time-complexity

5
推荐指数
1
解决办法
4092
查看次数

为什么我们不能在if语句后面定义一个变量

public class Foo{    
  public static void main(String []args){  
    int a=10;
    if(a==10)
    int x=20;    
  }
}
Run Code Online (Sandbox Code Playgroud)

在编译上面的代码时,编译时会抛出一个错误.

但是,在下面的代码中它很好.为什么?

public class Foo{    
  public static void main(String []args){    
    int a=10;    
    if(a==10){    
    int x=20;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白.这些究竟发生了什么?据我所知,我们可以在没有花括号的if语句之后编写一个语句(复合语句块).

java variables if-statement

4
推荐指数
1
解决办法
81
查看次数

为什么在类中定义compareTo方法时可以实现Comparable接口?

您可以compareTo在不实现Comparable接口的情况下在类中定义方法 .实现Comparable 界面有什么好处?

java interface comparable

-1
推荐指数
1
解决办法
1117
查看次数