codeforces Round680 C. Division 题解

题目

Oleg’s favorite subjects are History and Math, and his favorite branch of mathematics is division.

To improve his division skills, Oleg came up with t t t pairs of integers p i p_i pi and q i q_i qi and for each pair decided to find the greatest integer x i x_i xi, such that:

  • p i p_i pi is divisible by x i x_i xi;
  • x i x_i xi is not divisible by q i q_i qi.

Oleg is really good at division and managed to find all the answers quickly, how about you?

Input

The first line contains an integer t t t ( 1 ≤ t ≤ 50 ) (1≤t≤50) (1t50) — the number of pairs.

Each of the following t t t lines contains two integers p i p_i pi and q i q_i qi ( 1 ≤ p i ≤ 1 0 18 ; 2 ≤ q i ≤ 1 0 9 ) (1≤ p_i≤10^{18}; 2≤q_i≤10^9) (1pi1018;2qi109)— the i − t h i-th ith pair of integers.

Output

Print t t t integers: the i − t h i-th ith integer is the largest x i x_i xi such that p i p_i pi is divisible by x i x_i xi, but x i x_i xi is not divisible by q i q_i qi.

One can show that there is always at least one value of x i x_i xii satisfying the divisibility conditions for the given constraints.

Example

input

3
10 4
12 6
179 822

output

10
4
179

Note

For the first pair, where p 1 = 10 p_1=10 p1=10 and q 1 = 4 q_1=4 q1=4, the answer is x 1 = 10 x_1=10 x1=10, since it is the greatest divisor of 10 10 10 and 10 10 10 is not divisible by 4 4 4.

For the second pair, where p 2 = 12 p_2=12 p2=12 and q 2 = 6 q_2=6 q2=6, note that

  • 12 12 12 is not a valid x 2 x_2 x2, since 12 12 12 is divisible by q 2 = 6 q_2=6 q2=6;
  • 6 6 6 is not valid x 2 x_2 x2 as well: 6 6 6 is also divisible by q 2 = 6 q_2=6 q2=6.

The next available divisor of p 2 = 12 p_2=12 p2=12 is 4 4 4, which is the answer, since 4 4 4 is not divisible by 6 6 6.

题意

找一个最大的 x x x,满足 p   %   x = = 0   a n d   x   %   q ! = 0 p\ \%\ x == 0 \ and\ x\ \%\ q != 0 p % x==0 and x % q!=0

思路

质因数分解

  • p   %   q   ! =   0 p\ \%\ q\ !=\ 0 p % q != 0 x = p x = p x=p
  • p   %   q   =   0 p\ \%\ q\ =\ 0 p % q = 0 , 那么 p p p一定包含 q q q的所有质因数分解的结果。

举例:

p = 12    q = 6 p = 12\ \ q = 6 p=12  q=6
p = 2 2 ∗ 3 1 p = 2^2 * 3^1 p=2231 q = 2 1 + 3 1 q = 2^1 +3^1 q=21+31

要使 p   %   q   ! =   0 p\ \%\ q\ !=\ 0 p % q != 0, 只要使 p p p 将质因数 2 2 2降幂到 0 0 0(也就是q的质因数 2 2 2的次幂之下),或者将 3 3 3 的幂降到 0 0 0

所以,我们只需要枚举 q q q的质因子, 找权值最小的,即为答案。

代码

#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int maxn = 2e5 + 10;
int ans[maxn];

void solve(){
   
    ll p, q;
    cin >> p >> q;
    if(p % q) {
    //p不能被q整除,答案就是p
        cout << p << endl;
        return;
    }
    ll ans = 0;
    for (ll i = 1; i * i <= q; i++){
   
        if(q % i) continue; // 不是q的因子
        //i 和 q/i 都是因子
        ll t = p;
        if(i != 1){
   
            while(t % q == 0) t /= i; 
            ans = max(ans, t);
        }
        t = p;
        while(t % q == 0) t /= (q / i);
        ans = max(ans, t);
    }
    cout << ans << endl;
}
int main(){
   
    IOS; int t; cin >> t;
    while(t--){
   
        solve();
    }
    return 0;
}