求所有素数

素数,又称质数,其定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

question:求100以内的所有素数。

thinking:首先想到遍历这100个数,然后循环体内判断这个数是否为质数,假如是质数则打印。

如何判断一个数是否为质数? answer:只要 大于1 且 小于其本身的所有数 和它取余都不为0即可。

那么体现在代码中,则可以这样写:

public static void main(String[] args) {
    printPrimeNumber(100);
}

private static void printPrimeNumber(int area){
    // 遍历所有数
    for(int i=1; i<=area; i++){
        // 判断是否为质数
        boolean result = isPrimeNumber(i);
        if(result){
            System.out.println(i);
        }
    }
}

private static boolean isPrimeNumber(int num){
    for(int i=2; i

添加异常处理:

private static void printPrimeNumber(int area){
    if(area <= 0){
        return;
    }

    // 遍历所有数
    for(int i=1; i<=area; i++){
        // 判断是否为质数
        boolean result = isPrimeNumber(i);
        if(result){
            System.out.println(i);
        }
    }
}

private static boolean isPrimeNumber(int num){
    if(num <= 0){
        return false;
    }

    for(int i=2; i

改进:isPrimeNumber函数的循环中其实扩大了遍历范围,每个数都不能被大于它1/2的数整除。因此函数可以修改为:

private static boolean isPrimeNumber(int num){
    if(num <= 0){
        return false;
    }
    int max = num/2;
    for(int i=2; i<=max; i++){
        if(num % i == 0){
            return false;
        }
    }
    return true;
}

你可能感兴趣的:(算法)