#L0405. GCD 倍增操作

GCD 倍增操作

题目描述

你有一个正整数 xx,可以进行如下操作:

  • 选择任意正整数 yy,令 xx×gcd(x,y)x \gets x \times \gcd(x, y)(其中 gcd(x,y)\gcd(x, y) 表示 xxyy 的最大公因数)。

初始时 x=nx = n,目标是通过若干次操作(也可以不操作)使 x=mx = m。求最少操作次数,或报告无解。

输入格式

本题包含多组测试数据。

第一行一个正整数 TT,表示数据组数。

接下来 TT 行,每行两个正整数 n,mn, m

输出格式

对每组数据:

  • 若无解,输出 1-1
  • 否则输出一行一个非负整数,表示最少操作次数。

样例

6
1 1
2 4
2 6
12 288
30 144000
114 5141919810
0

1 -1 2 3 -1

</p>

提示

样例解释

第一组:无需操作,答案 00

第二组:选择 y=6y=6x=2×gcd(2,6)=4x = 2 \times \gcd(2,6) = 4

第三组:无法达成目标,输出 1-1

第四组:选择 y=16y=16x=12×gcd(12,16)=48x = 12 \times \gcd(12,16) = 48;再选 y=6y=6x=48×gcd(48,6)=288x = 48 \times \gcd(48,6) = 288

数据范围

测试点编号$n \le$$m \le$分值
$1$$100$$2 \times 10^3$$21$
$2$$2$$10^{18}$$17$
$3$$10^5$$10^5$$14$
$4$$10^7$$10^7$$16$
$5$$10^{18}$$10^{18}$$32$

对于所有数据,1T2×1051 \le T \le 2 \times 10^51nm10181 \le n \le m \le 10^{18}

难度 普及
通过率
尝试 0
已通过 0
ID
1133
类型
传统题
Time Limit
2000ms
Memory Limit
512MiB
上传者