题目链接
题解
题意
找一个最大的整数x
满足
p
m
o
d
x
=
=
0
p\mod x == 0
pmodx==0 &&
x
m
o
d
q
≠
0
x \mod q \neq 0
xmodq=0.
思路
若p % q != 0
,则p
即为所求。
否则p % q == 0
,通过分解因数我们可以得到:
q
=
m
1
∗
m
2
q = m_1*m_2
q=m1∗m2 以及
p
=
m
1
∗
m
2
∗
m
3
p = m_1*m_2*m_3
p=m1∗m2∗m3,其中m1
、m2
、m3
互质。
我们所求的x
必然是p
有q
没有的一个因子,则它由若干个m1
、m2
与至少一个m3
组成。那么我们可以得到
p
/
x
p / x
p/x 一定是q
的一个因子的倍数。
所以我们分解q
的因子,用p
不断除以该因子直到p
满足题意。取所得的结果中最大的即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll p, q;
ll solve(ll t) {
if (t == 1) return t;
ll tmp = p;
while (tmp % q == 0) {
tmp /= t;
}
return tmp;
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> p >> q;
if (p % q) cout << p << '\n';
else {
ll ans = 1;
for (int i = 1; i * i <= q; i++) {
if (q % i == 0) {
ll a = i, b = q / i;
ans = max(ans, max(solve(a),solve(b)));
}
}
cout << ans << '\n';
}
}
return 0;
}