zoukankan      html  css  js  c++  java
  • CF #356 div1 A. Bear and Prime 100

    题目链接:http://codeforces.com/contest/679/problem/A

    CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20次问题,每一次询问一个数字x,如果预先选定的隐藏数是x的倍数,则回复"yes",否则回复"no",你只需要判那个数字是否为质数(不一定需要知道具体是多少)

    如果一个数字是两个质数积的倍数,则这个数字一定是合数,另外需要注意,两个质数是可以相同的。即如果隐藏数是a*b的倍数(其中a和b为两个质数),则隐藏数是合数。由此,我们只需要枚举50以内的质数即可(超过50的质数乘以2也已经大于100了)。则2到50有15个质数,分别是2,3,5,7,11,13,17,19,23,29,31,37,41,43,47。

    只需要判断隐藏数是否为其中至少两个数字的倍数即可,特别注意在2,3,5,7回复"yes后,需要再判断是否为4,9,25,49的倍数。

     1 import java.io.OutputStream;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.PrintWriter;
     5 import java.util.List;
     6 import java.util.StringTokenizer;
     7 import java.io.IOException;
     8 import java.io.BufferedReader;
     9 import java.io.InputStreamReader;
    10 import java.util.ArrayList;
    11 import java.io.InputStream;
    12 
    13 public class Main {
    14     public static void main(String[] args) {
    15         InputStream inputStream = System.in;
    16         OutputStream outputStream = System.out;
    17         InputReader in = new InputReader(inputStream);
    18         PrintWriter out = new PrintWriter(outputStream);
    19         TaskA solver = new TaskA();
    20         solver.solve(1, in, out);
    21         out.close();
    22     }
    23 
    24     static class TaskA {
    25         public void solve(int testNumber, InputReader in, PrintWriter out) {
    26             List<Integer> primes = new ArrayList<>();
    27             for (int i = 2; i <= 50; i++) {
    28                 boolean isPrime = true;
    29                 for (int j = 2; j * j <= i; j++) {
    30                     if (i % j == 0) {
    31                         isPrime = false;
    32                     }
    33                 }
    34                 if (isPrime) {
    35                     primes.add(i);
    36                 }
    37             }
    38             int cnt = 0;
    39             for (Integer prime : primes) {
    40                 out.println(prime);
    41                 out.flush();
    42                 String reply = in.next();
    43                 cnt += (reply.equals("yes") ? 1 : 0);
    44                 if (prime * prime <= 100) {
    45                     out.println(prime * prime);
    46                     out.flush();
    47                     reply = in.next();
    48                     cnt += (reply.equals("yes") ? 1 : 0);
    49                 }
    50                 if (cnt > 1) {
    51                     out.println("composite");
    52                     return;
    53                 }
    54             }
    55             out.println("prime");
    56         }
    57 
    58     }
    59 
    60     static class InputReader {
    61         private BufferedReader reader;
    62         private StringTokenizer tokenizer;
    63 
    64         public InputReader(InputStream stream) {
    65             reader = new BufferedReader(new InputStreamReader(stream));
    66             tokenizer = null;
    67         }
    68 
    69         public String next() {
    70             while (tokenizer == null || !tokenizer.hasMoreTokens()) {
    71                 try {
    72                     tokenizer = new StringTokenizer(reader.readLine());
    73                 } catch (IOException e) {
    74                     throw new RuntimeException(e);
    75                 }
    76             }
    77             return tokenizer.nextToken();
    78         }
    79 
    80     }
    81 }
  • 相关阅读:
    安卓-登陆页面的实现
    异常
    实用类
    Hashset
    Map
    LinkedList
    arraylist
    继承
    字符串相关代码
    数组代码
  • 原文地址:https://www.cnblogs.com/micrari/p/5572670.html
Copyright © 2011-2022 走看看