POJ 1595:Prime Cuts
Description
一个素数是一个只能被1和自己整除的数(这里1是素数)。在这个问题中,你需要写一个程序,这个程序能够在[1,N]范围的素数列表中截取一部分素数。你的程序将读入一个数字N,判定[1,N]中的素数列表L;如果L的长度是偶数,则输出最中间的C*2个素数,如果L的长度是奇数,则输出最中间的C*2-1个素数。
Input
每个输入集都在一行中,且包含两个数字,第一个数字是N($1\le N \le 1000$),第二个数字是C($1 \le C\le N$),我们需要求出[1,N]中的全部素数组成一个列表,如果这个列表长度是偶数,则输出最中间的C*2个素数;如果这个列表长度是奇数,则输出最中间的C*2-1个素数。
Output
对于每个输入集,你应该先输出N,接下来跟一个空格,然后是C,再跟一个冒号(:),然后是素数列表当中的中间一段素数。如果需要输出的素数长度超过了素数列表的长度,则就输出整个素数列表。每个素数输出后都需要有一个空格。每行输出都需要空一行。因此你的输出应该类似于Sample output中的形式。
Sample Input
21 2
18 2
18 18
100 7
Sample Output
21 2: 5 7 11
18 2: 3 5 7 11
18 18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
Source
1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 public class Main { 6 public static List<Integer> sieve(int n){ 7 boolean[] arr = new boolean[n+1]; 8 for(int i=0;i<arr.length;i++) 9 arr[i] = true; 10 int bound = (int)Math.floor(Math.sqrt(n)); //根号n 11 for(int i=2;i<=bound;i++){ 12 if(arr[i]){ 13 for(int j=2;j*i<=n;j++){ 14 arr[i*j] = false; 15 } 16 } 17 } 18 ArrayList<Integer> list = new ArrayList<Integer>(); 19 for(int i=1;i<arr.length;i++){ 20 if(arr[i]) { 21 list.add(i); 22 } 23 } 24 return list; 25 } 26 public static void method(int N,int C){ 27 int old_N = N; 28 int old_C = C; 29 List<Integer> list = sieve(N); 30 int size = list.size(); 31 int print_size = 0; //输出的长度 32 int begin = 0; //开始输出的位置 33 if(size%2==0){ 34 print_size = C * 2; 35 if(print_size > size){ 36 print_size = size; 37 begin = 0; 38 } 39 else{ 40 begin = size / 2 - C; 41 } 42 } 43 else{ 44 print_size = C * 2 - 1; 45 if(print_size > size){ 46 print_size = size; 47 begin = 0; 48 } 49 else{ 50 begin = size / 2 - C + 1; 51 } 52 } 53 System.out.print(old_N+" "+old_C+": "); 54 for(int i=begin;i<begin+print_size;i++){ 55 System.out.print(list.get(i)+" "); 56 } 57 System.out.println("\n"); 58 } 59 public static void main(String[] args) { 60 Scanner in = new Scanner(System.in); 61 while(true){ 62 String line = in.nextLine().trim(); 63 if(line==null || "".equals(line)){ 64 return; 65 } 66 String arr[] = line.split(" "); 67 int N = Integer.parseInt(arr[0]); 68 int C = Integer.parseInt(arr[1]); 69 method(N,C); 70 } 71 72 } 73 }