Java计算素数

1 什么是素数

素数又称质数,指的是,除了1和它本身,没有第三个数能够整除它。
例如:

  • 2:只能够被1和2整除,质数
  • 3:只能够被1和3整除,质数
  • 4:能够被1、2、4整除,除了1和本身4,还有2,所以不是质数

注意:1本身只能够被1整除,不算质数。


2 如何计算

根据质数(素数)的定义不难得出,要计算一个数是不是质数,需要明确是不是除了1和本身以外,还有其他除数。由此可以有一个计算思路:

  • 给定一个数值n
  • 从1到他本身之间循环i,用n去除i
  • 除尽的话,判断i是否是本身或是1
  • 若是1,继续循环计算
  • 若是本身,则是质数。
  • 中间有能够整除n的数,则n不是质数

大致流程图如下:

Created with Raphaël 2.1.0开始数值:nfor(int i=1;i<n;i++)n % i == 0?i==1/i==n?结束yesno

3 Java代码实现

根据上面流程图分析,下图为计算代码:

/**
     * 判断一个数是不是质数
     * @param number
     * @return
     */
    public static boolean isPrime(int number){
        if(number<2){//若此数小于2,则不是质数
            return false;
        }
        //从1-number本身循环取余计算
        for(int i=1;i<number;i++){
            if(number % i == 0){//余数为0,能整除
                if(number == i){//是否是本身
                    return true;
                }else if(i!=1){//是否是1
                    return false;
                }
            }
        }
        return true;
    }

判断素数的方法已经写出来,可以利用这个方法做其他运算,下面有一些计算示例:

3 计算一段范围内的素数

打印出n~m区间,所有的素数:

public static void getPrimeNumber(int start,int end){
        int primArr[] = new int[end-start];//用数组存素数,范围在给出的范围之内,使用集合会更加合理
        if(end<start){//判断参数有效性
            System.out.println("输入参数有误!");
        }else{
            int index = 0;//数组下标,
            for(int i = start;i<=end;i++){
                if(isPrime(i)){//判断是否质数
                    primArr[index] = i;
                    index ++;
                }
            }
        }
        if(primArr.length>0){//打印数组
            for(int i=0;i<primArr.length;i++){
                System.out.println(primArr[i]);
            }
        }
    }

4 计算前m个素数

    /**
     * 打印出前m个素数
     * @param m
     */
    public static void getTopPrime(int m){
        int primArr[] = new int[m];
        if(m<1){
            System.out.println("输入有误!");
        }else{
            int num = 0;//要计算的数
            int index = 0;//第几个质数
            while(index < m){//数量不到m个一直循环
                num++;//自增,不断计算
                if(isPrime(num)){
                    primArr[index] = num;
                    index++;
                }
            }
        }
        if(primArr.length>0){
            for(int i=0;i<primArr.length;i++){
                System.out.println(primArr[i]);
            }
        }
    }

5 总结

计算素数最重要的思想在于,不在乎这个数到底有几个除数,把小于这个数的所有数循环除一遍,比较,既可以得出结论。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章