输出0到X之间全部质数

质数定义:能且仅能被1和它自己整除的整数,称为质数,最小的质数是2。java

思路:若是X在(2,X-1] 这个区间内没有约数,则证实X是质数。优化

实现方法一:code

/**
 * @author 蜗牛君
 * @create 2019-09-12 16:52
 */
/*输出100000以内的质数
* 质数的定义:能且只被1和它自己整除的数称为质数
* */
public class primeNumberTest {
    public static void main(String[] args) {
        //定义一个变量记录质数的个数
        int primeNumberCount = 0;
        //获取当前时间
        long start = System.currentTimeMillis();
        //计算0到100000之间质数的个数
        int num = 100000;
        for (int i = 2; i <= num; i++) {
            //定义一个bool型变量,用来判断是否是质数
            boolean isFlag = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    //若是在(2,i-1]这个区间内有约数,说明不是质数
                    isFlag = false;
                }
            }
            if (isFlag == true) {
                //System.out.println(i + "是质数");
                primeNumberCount++;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("本次运算用时:" + (end - start ) + "毫秒");
        System.out.println("0到"+ num + "之间共有"+ primeNumberCount +"个质数!");
    }
}

实现方法二:class

是对方法一的优化,一旦判断X为质数,就经过countinue来跳出本次循环,节省算力,缩减计算时间变量

注:对循环体添加标签,能够方便break、continue直接跳转到指定的循环体循环

public class primeNumberTest {
    public static void main(String[] args) {
        int primeNumberCount = 0;
        //获取当前时间
        long start = System.currentTimeMillis();
        int num = 100000;
        lable:for ( int i = 2 ; i <= num ; i++ ){
            int count = 0;
            for (int j = 2; j < i;j ++){
                if (i % j == 0) {
                    //当在这个区间有公约数时,可判断不是质数,直接退出循环,再也不进行后面的判断,可缩减部分运算时间
                    continue lable ;
                }
            }
            primeNumberCount++;
        }
        long end = System.currentTimeMillis();
        System.out.println("本次运算用时:" + (end - start ) + "毫秒");
        System.out.println("0到"+ num + "之间共有"+ primeNumberCount +"个质数!");
    }
}

实现方法三:方法

再次优化,重点在二层循环时,减小了对 j 的判断的范围。im

说明:若是 C = A x A,则只须要肯定 C 在 ( 2 , A ] 的区间内没有约数,就能够证实 C 是质数。static

public class primeNumberTest {
    public static void main(String[] args) {
        int primeNumberCount = 0;
        //获取当前时间
        long start = System.currentTimeMillis();
        int num = 100000;
        lable:for ( int i = 2 ; i <= num ; i++ ){
            int count = 0;
            for (int j = 2; j < i;j ++){
                if (i % j == 0) {
                    //当在这个区间有公约数时,可判断不是质数,直接退出循环,再也不进行后面的判断,可缩减部分运算时间
                    continue lable ;
                }
            }
            primeNumberCount++;
        }
        long end = System.currentTimeMillis();
        System.out.println("本次运算用时:" + (end - start ) + "毫秒");
        System.out.println("0到"+ num + "之间共有"+ primeNumberCount +"个质数!");
    }
}
相关文章
相关标签/搜索