1. 程式人生 > >PAT乙級Java實現_1013 數素數 (20) _附詳細解題註釋_13

PAT乙級Java實現_1013 數素數 (20) _附詳細解題註釋_13

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
作者: CHEN, Yue單位: PAT聯盟時間限制: 200ms記憶體限制: 64MB程式碼長度限制: 16KB
package pat_b;

import java.util.Scanner;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Arrays;
//直接把素數表先打出來
public class PAT_B_1013 
{
	public static void main(String[] args)
	{
		int len = 200005;//素數表的長度,要大一些,100005太小,會有錯誤。
		int[] sushu = new int[len];
		Arrays.fill(sushu, 1);//1代表是素數,0代表非素數
		
		for(int i = 2; i < len; i++)//計算出素數表
		{
			if(sushu[i] == 1)
			{
				for(int j = i+i; j < len; j +=i)
				{
					sushu[j] = 0;
				}
			}
		}
		
		Scanner in = new Scanner(System.in);
		int start = in.nextInt();
		int end = in.nextInt();
		int count = 0;//素數表中的第幾個素數
		int line = 0;//[start,end]範圍內的第幾個素數
		
		for(int i = 2; i < len; i++)
		{
			if(sushu[i] == 1)//找到素數
			{
				count ++;
				if(count >= start && count <= end)//找到[start,end]範圍內的素數
				{
					line++;
					
					if(line % 10 == 1)//格式化輸出
						System.out.print(i);
					else
						System.out.print(" " + i);
					if(line % 10 == 0)
					{
						System.out.println();
					}
				}
			}
		}
		
	}
}