筛法求素数表,输出全是0?

import java.util.Scanner;

public class B1013_2 {                            /*求素数表第m到第n个中间的所有素数*/
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int M = in.nextInt();
        int N = in.nextInt();
        boolean []num = new boolean[10001];
        for (int x = 1; x < 10001; x++) /* num[1] ~ num[10001] 均不是质数*/
        {
            num[x] = true; 
        }
        int []prime = new int[N+1];/*若是N,则不到27, 27越界了,所以N+1 */
        int z = 0;

        for (int i = 2; i < 10001; i++) /*把小于10000的素数都求了一遍*/
        {
            if (num[i] == true) /*是质数*/
            {
                prime[z++] = i; /*若是prime[i] = i  z是第几个质数*/
                if (z > N)
                {
                    break;
                }
                for (int j = i + i; j < 10001; j += i) /*筛掉它的所有倍数*/
                {
                    num[j] = false; /*不是质数*/
                }

                if (z >= M && z <= N)
                {
                    if ((z-M+1) % 10 > 0 && z != N)
                    {
                        System.out.print(prime[z] + " ");                           
                    }
                    else if ( z % 10 == N)
                    {
                        System.out.print(prime[z]);                     
                    }
                    else
                    {
                        System.out.print(prime[z]);
                        System.out.print("\n");                         
                    }   
                }   
            }           
        }           
        in.close();
    }       
}

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。

输入格式:

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

输出格式:

输出从PM到PN的所有素数,每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

筛法求素数表,输出全是0?

 Scanner in = new Scanner(System.in);
        int M = in.nextInt();
        int N = in.nextInt();
        boolean[] num = new boolean[10001];
        for (int x = 1; x < 10001; x++) /* num[1] ~ num[10001] 均不是质数 */
        {
            num[x] = true;
        }
        int z = 0;
        List<Integer> lists = new ArrayList<>();
        for (int i = 2; i < 10001; i++) /* 把小于10000的素数都求了一遍 */
        {
            z += 1;
            if (num[i] == true) /* 是质数 */
            {

                // prime[z] = i; /* 若是prime[i] = i z是第几个质数 */
                if (z > N) {
                    break;
                }
                for (int j = i + i; j < 10001; j += i) /* 筛掉它的所有倍数 */
                {
                    num[j] = false; /* 不是质数 */
                }
                if (z >= M && z <= N) {
                    lists.add(i);
                }

            }
        }
        for (int i = 0; i <= lists.size(); i += 10) {
            for (int j = i; j < i + 10 && (i + 10) <= lists.size(); j++) {
                System.out.print(lists.get(j) + " ");
            }
            System.out.println();
        }

        // 显示余下的.
        if (lists.size() % 10 != 0) {
            for (int i = lists.size() - (lists.size() % 10); i < lists.size(); i++) {
                System.out.print(lists.get(i) + " ");
            }
        }

        in.close();

改好了,参考下.