zoukankan      html  css  js  c++  java
  • 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 }
    View Code
    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    如何计算两个日期之间相差天数
    解决并发问题的小技巧
    Linq实现下拉框绑定
    No DataType in DataTemplate in Windows Phone(二)
    使用TOAD操作oracle初步
    使用log4net记录server Log
    尘世一场烟火
    No DataType in DataTemplate in Windows Phone(—)
    MVC设置初始页时发生的无法找到资源的简单错误
    oracle 使用in的灵异事件
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3130040.html
Copyright © 2011-2022 走看看