#T0083. 公约数公倍数配对

0
    ID: 1146 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数论质因数分解最大公约数最小公倍数

公约数公倍数配对

题目描述

给定正整数 GGLL,请统计有多少对有序正整数对 (x,y)(x,y) 同时满足:

gcd(x,y)=G,lcm(x,y)=L\gcd(x,y)=G,\qquad \operatorname{lcm}(x,y)=L

有序的含义是:当 xyx\ne y 时,(x,y)(x,y)(y,x)(y,x) 算两对。

共有 TT 组询问,对每组询问输出答案。

输入格式

第一行一个整数 TT,表示询问组数。

接下来 TT 行,每行两个正整数 G,LG,L,用空格分隔。

输出格式

TT 行,每行一个整数,表示满足条件的有序数对数量。若不存在这样的数对,输出 0

样例输入1

2
6 72
5 8

样例输出1

4
0

样例输入2

2
2 60060
1 1

样例输出2

64
1

数据范围与约定

  • 1T1001\le T\le 100
  • 1G,L2×1091\le G,L\le 2\times 10^9
  • 保证答案不超过 10910^9

提示

如果 LL 不是 GG 的倍数,显然无解。

否则令 K=LGK=\dfrac{L}{G},并设 x=Ga, y=Gbx=G\cdot a,\ y=G\cdot b。代入两个条件可以得到:

gcd(a,b)=1,ab=K\gcd(a,b)=1,\qquad a\cdot b=K

也就是说,要把 KK 的每个质因子(连同它的完整幂次)整个分给 aa 或整个分给 bb:因为 gcd(a,b)=1\gcd(a,b)=1,同一个质数不能两边都有。

KK 的不同质因子个数为 ω(K)\omega(K)(只数有几种质数,不数幂次),每个质因子有“分给 aa”和“分给 bb”两种选择,于是:

答案=2ω(K)\text{答案}=2^{\omega(K)}

用试除法分解 KK,每发现一个新的质因子就让答案乘以 22 即可。特别地,K=1K=1ω(K)=0\omega(K)=0,答案为 11(数对 (G,G)(G,G))。