算法一:求100以内的素数

80 阅读1分钟
// 求100以内的素数 素数的定义:只能被1和自身整除的为素数  其中素数一定是奇数  偶数一定不是素数 0,1 一定不是素数

第一版:暴力循环解法

public static int getNumber(int number) {
    int count = 0;
    for (int i = 2 ; i<number; i++) {
        count += isPrime(i) ? 1 : 0;
    }
    return count;
}

public static Boolean isPrime(int i) {
    for (int j = 2; j <= i; j++) {
        if (i % j == 0) {
            return false;
        }
    }
    return true;
}

public static void main(String[] args) {
    int num = getNumber(100);
    System.out.println(num);
}

优化建议:j < i 判断时间复杂度是0(n) 根号i = m * n 例如:根号21 = 4.58 所以可以循环到4,其中3<4<7,在判断3时已经知道21是素数了,循环到4已经知道结果了。所以条件可以更改为j < 根号i,也可以为j * j <= i。

第二版:优化时间复杂度为o(根号i)

public static int getNumber(int number) {
    int count = 0;
    for (int i = 2 ; i<number; i++) {
        count += isPrime(i) ? 1 : 0;
    }
    return count;
}

public static Boolean isPrime(int i) {
    for (int j = 2; j*j <= i; j++) {
        if (i % j == 0) {
            return false;
        }
    }
    return true;
}

public static void main(String[] args) {
    int num = getNumber(100);
    System.out.println(num);
}