CF1310F.Bad Cryptography

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

In modern cryptography much is tied to the algorithmic complexity of solving several problems. One of such problems is a discrete logarithm problem. It is formulated as follows:

Let's fix a finite field and two it's elements aa and bb . One need to fun such xx that ax=ba^x = b or detect there is no such x. It is most likely that modern mankind cannot solve the problem of discrete logarithm for a sufficiently large field size. For example, for a field of residues modulo prime number, primes of 1024 or 2048 bits are considered to be safe. However, calculations with such large numbers can place a significant load on servers that perform cryptographic operations. For this reason, instead of a simple module residue field, more complex fields are often used. For such field no fast algorithms that use a field structure are known, smaller fields can be used and operations can be properly optimized.

Developer Nikolai does not trust the generally accepted methods, so he wants to invent his own. Recently, he read about a very strange field — nimbers, and thinks it's a great fit for the purpose.

The field of nimbers is defined on a set of integers from 0 to 22k12^{2^k} - 1 for some positive integer kk . Bitwise exclusive or ( \oplus ) operation is used as addition. One of ways to define multiplication operation ( \odot ) is following properties:

  • 0a=a0=00 \odot a = a \odot 0 = 0
  • 1a=a1=a1 \odot a = a \odot 1 = a
  • ab=baa \odot b = b \odot a
  • a(bc)=(ab)ca \odot (b \odot c)= (a \odot b) \odot c
  • a(bc)=(ab)(ac)a \odot (b \oplus c) = (a \odot b) \oplus (a \odot c)
  • If a=22na = 2^{2^n} for some integer n>0n > 0 , and b<ab < a , then ab=aba \odot b = a \cdot b .
  • If a=22na = 2^{2^n} for some integer n>0n > 0 , then aa=32aa \odot a = \frac{3}{2}\cdot a .

For example:

  • $ 4 \odot 4 = 6$
  • $ 8 \odot 8 = 4 \odot 2 \odot 4 \odot 2 = 4 \odot 4 \odot 2 \odot 2 = 6 \odot 3 = (4 \oplus 2) \odot 3 = (4 \odot 3) \oplus (2 \odot (2 \oplus 1)) = (4 \odot 3) \oplus (2 \odot 2) \oplus (2 \odot 1) = 12 \oplus 3 \oplus 2 = 13.$
  • 3264=(162)(164)=(1616)(24)=248=(168)8=(168)(88)=12813=14132 \odot 64 = (16 \odot 2) \odot (16 \odot 4) = (16 \odot 16) \odot (2 \odot 4) = 24 \odot 8 = (16 \oplus 8) \odot 8 = (16 \odot 8) \oplus (8 \odot 8) = 128 \oplus 13 = 141
  • 56=(41)(42)=(44)(42)(41)(12)=6842=85 \odot 6 = (4 \oplus 1) \odot (4 \oplus 2) = (4\odot 4) \oplus (4 \odot 2) \oplus (4 \odot 1) \oplus (1 \odot 2) = 6 \oplus 8 \oplus 4 \oplus 2 = 8

Formally, this algorithm can be described by following pseudo-code.

It can be shown, that this operations really forms a field. Moreover, than can make sense as game theory operations, but that's not related to problem much. With the help of appropriate caching and grouping of operations, it is possible to calculate the product quickly enough, which is important to improve speed of the cryptoalgorithm. More formal definitions as well as additional properties can be clarified in the wikipedia article at link. The authors of the task hope that the properties listed in the statement should be enough for the solution.

Powering for such muliplication is defined in same way, formally ak=aaak timesa^{\odot k} = \underbrace{a \odot a \odot \cdots \odot a}_{k~\texttt{times}} .

You need to analyze the proposed scheme strength. For pairs of numbers aa and bb you need to find such xx , that ax=ba^{\odot x} = b , or determine that it doesn't exist.

输入格式

In the first line of input there is single integer tt ( 1t1001 \le t \le 100 ) — number of pairs, for which you need to find the discrete logarithm.

In each of next tt line there is a pair of integers aa bb ( 1a,b<2641 \le a, b < 2^{64} ).

输出格式

For each pair you should print one integer xx ( 0x<2640 \le x < 2^{64} ), such that ax=ba^{\odot x} = b , or -1 if no such x exists. It can be shown, that if any such xx exists, there is one inside given bounds. If there are several good values, you can output any of them.

输入输出样例

  • 输入#1

    7
    2 2
    1 1
    2 3
    8 10
    8 2
    321321321321 2
    123214213213 4356903202345442785

    输出#1

    1
    1
    2
    4
    -1
    6148914691236517205
    68943624821423112
首页