java-1013 数素数 (20)

1013 数素数 (20)(20 分)

令P~i~表示第i个素数。现任给两个正整数M <= N <= 10^4^,请输出P~M~到P~N~的所有素数。

输入格式:

输入在一行中给出M和N,其间以空格分隔。

输出格式:

输出从P~M~到P~N~的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例:

5 27

输出样例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

需要注意的问题:第10000个质数非常有可能已经超过了int的界限,所以我们要使用long类型的变量来存储质数

这回我觉得先上处理流程比较好:

public static void main() throws IOException {
        int[] range = getData();//获取范围
        long lastPrime = 1;
        int count = 0;
        for (int i = 1 ; i < range[0] ; i ++) {//从1开始到下界之前的一个质数
            lastPrime = getPrimeBase(lastPrime);
        }

        for (int i = range[0] ; i < range[1]; i ++) {//从下界开始到上界的前一个质数
            print((lastPrime = getPrimeBase(lastPrime)), (++count) % 10);
        }
        System.out.print(getPrimeBase(lastPrime));//输出最后一个
    }

getData():用于获取下界和上界

public static int[] getData() throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String[] targetString = bufferedReader.readLine().split(" +");
        int[] range = new int[2];
        range[0] = Integer.parseInt(targetString[0]);
        range[1] = Integer.parseInt(targetString[1]);
        return range;
    }

getPrimeBase(int):返回基于参数的下一个质数

public static long getPrimeBase(long i) {
        boolean flag;
        if (i == 1)//否则后面会直接跳转到三
            return 2;
        i = i % 2 ==0 ? i + 1 : i + 2;//质数除了2,都是偶数
        for (long result = i; true ; result += 2) {//这里+2是和之前一个道理
            flag = true;
            for (int judge = 2 ; judge * judge <= result ; judge ++) {
                if (result % judge == 0){
                    flag = false;
                    break;
                }
            }
            if (flag)
                return result;
        }
    }

print(int, int)按照相应的格式输出

public static void print(long lastPrime, int count) {
        switch (count) {
            case 0:
                System.out.print(lastPrime);
                System.out.println();
                break;
                default:
                    System.out.print(lastPrime + " ");
                    break;
        }
    }

猜你喜欢

转载自blog.csdn.net/jdie00/article/details/81335328