PAT乙級Java實現_1013 數素數 (20) _附詳細解題註釋_13
阿新 • • 發佈:2019-01-07
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程式碼長度限制: 16KBpackage 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(); } } } } } }