找到第一个'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',这种关系就成立了.我需要解释)
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语句之后编写一个语句(复合语句块).
您可以compareTo在不实现Comparable接口的情况下在类中定义方法
.实现Comparable
界面有什么好处?