CF1355F.Guess Divisors Count

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is an interactive problem.

We have hidden an integer 1X1091 \le X \le 10^{9} . You don't have to guess this number. You have to find the number of divisors of this number, and you don't even have to find the exact number: your answer will be considered correct if its absolute error is not greater than 7 or its relative error is not greater than 0.50.5 . More formally, let your answer be ansans and the number of divisors of XX be dd , then your answer will be considered correct if at least one of the two following conditions is true:

  • ansd7| ans - d | \le 7 ;
  • 12ansd2\frac{1}{2} \le \frac{ans}{d} \le 2 .

You can make at most 2222 queries. One query consists of one integer 1Q10181 \le Q \le 10^{18} . In response, you will get gcd(X,Q)gcd(X, Q) — the greatest common divisor of XX and QQ .

The number XX is fixed before all queries. In other words, interactor is not adaptive.

Let's call the process of guessing the number of divisors of number XX a game. In one test you will have to play TT independent games, that is, guess the number of divisors TT times for TT independent values of XX .

输入格式

The first line of input contains one integer TT ( 1T1001 \le T \le 100 ) — the number of games.

输出格式

To make a query print a line "? Q" ( 1Q10181 \le Q \le 10^{18} ). After that read one integer gcd(X,Q)gcd(X, Q) . You can make no more than 2222 such queries during one game.

If you are confident that you have figured out the number of divisors of XX with enough precision, you can print your answer in "! ans" format. ansans have to be an integer. If this was the last game, you have to terminate the program, otherwise you have to start the next game immediately. Note that the interactor doesn't print anything in response to you printing answer.

After printing a query do not forget to output end of line and flush the output. To do this, use:

  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.

Hacks

To hack, use the following format:

The first line contains one integer TT ( 1T1001 \le T \le 100 ) — the number of games.

Each of the next TT lines contains one integer XX ( 1X1091 \le X \le 10^{9} ) — the hidden number.

So the example has the form

<pre class="verbatim"><br></br>2<br></br>998244353<br></br>4194304<br></br>

输入输出样例

  • 输入#1

    2
    
    1
    
    1
    
    1
    
    
    1024
    
    1048576
    
    4194304

    输出#1

    ? 982306799268821872
    
    ? 230856864650023977
    
    ? 134690134760714371
    
    ! 5
    ? 1024
    
    ? 1048576
    
    ? 1073741824
    
    ! 42

说明/提示

Why the limitation for number of queries is 22 exactly? Maybe the problem author is a Taylor Swift fan.

Let's look at the example.

In the first game X=998244353X = 998\,244\,353 is hidden. Would be hard to guess this, right? This number is prime, so the number of its divisors is 2. The solution has made several random queries, and all the responses turned out to be 1 (strange things, not even one of three random numbers is divisible by 998244353998\,244\,353 ). It's fare to assume that the hidden number doesn't have many divisors, so the solution has answered 5. Why not. This answer will be considered correct since 52=37| 5 - 2 | = 3 \le 7 .

In the second game X=4194304=222X = 4\,194\,304 = 2^{22} is hidden, it has 23 divisors. The solution has made queries 1024=2101024 = 2^{10} , 1048576=2201\,048\,576 =2^{20} , 1073741824=2301\,073\,741\,824 = 2^{30} and got responses 1024=2101024 = 2^{10} , 1048576=2201\,048\,576 =2^{20} , 4194304=2224\,194\,304 = 2^{22} , respectively. Then the solution got completely confused and answered the answer to The Ultimate Question of Life, the Universe, and Everything. This answer will be considered correct since 1242232\frac{1}{2} \le \frac{42}{23} \le 2 .

首页