题面传送门
吐槽一句,这么水的题目能搞成蓝色???
好了,进入正题:
思路
首先,列出式子:
\[\left\{
\begin{aligned}
\gcd(x,a_0)=a_1\\
lcm(x,b_0)=b_1
\end{aligned}
\right.
\]
那么,先来看第一个式子:
\(\gcd(x,a_0)=a_1\),设\(k_0=x\div a_1,k_1=a_0\div a_1\)
可以很快得出,\(\gcd(k_0,k_1)=1\)
证明:
如果\(\gcd(k_0,k_1)=t,t>1\),设\(k_0=t\times w_0,k_1=t\times w_1\)
所以$$
\left{
\begin{aligned}
x=t\times w_0\times a_1\
a_0=t\times w_1\times a_1
\end{aligned}
\right.
\[那么$\gcd(x,a_0)=a_1\times t$了,所以$t$定为$1$
### 然后,再看第二个式子:
$lcm(x,b_0)=b_1$,设$k_0=b_1\div x,k_2=b_1\div b_0$,同样可以得出$\gcd(k_0,k_1)=1$
#### 证明:
若$\gcd(k_0,k_1)=t,t>1$,设$k_0=t\times w_0,k_1=t\times w_1$
则$$\left\{
\begin{aligned}
x=\dfrac{b_1}{t\times w_0}\\
b_0=\dfrac{b_1}{t\times w_1}
\end{aligned}
\right.
\]
那么,\(\gcd(x,b_0)=t\times w_0\times w_1\),所以,\(t\)定为\(1\)
所以,为了满足那个式子,就要$$\left{
\begin{aligned}
\gcd(x\div a_1,a_0\div a_1)=1\
\gcd(b_1\div x,b1\div b_0)=1
\end{aligned}
\right.
\[所以,$x$就是$b_1$的因数,只要从$1$到$\sqrt{b_1}$,枚举,然后看看符不符合,这里还有一个潜在的条件,题目中给了我们:输入数据保证 $a_0$ 能被 $a_1$ 整除,$b_1$ 能被 $b_0$ 整除,所以后面的$a_0\div a_1$和$b_1\div b_0$一定是整数,不用管,就要看看$x\div a_1$和$b_1\div x$是否为整数就可以了。
## 代码
```cpp
#include<bits/stdc++.h>
using namespace std;
int n;
int a0,a1,b0,b1;
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
int ans=0;
for(int i=1;i*i<=b1;i++){
if(b1%i==0){
if(i%a1==0&&gcd(i/a1,a0/a1)==1&&gcd(b1/i,b1/b0)==1)ans++;
if(i!=b1/i&&b1/i%a1==0&&gcd(b1/i/a1,a0/a1)==1&&gcd(b1/(b1/i),b1/b0)==1)ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
```
# 谢谢--zhengjun\]
标签:right,洛谷,gcd,--,题解,times,int,div,aligned
来源: https://www.cnblogs.com/A-zjzj/p/16364570.html