sinat_38214562
女青年与西西
2017-11-17 08:32

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

  • java
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

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答