Codeforces 1445C. Division 题解

 

Div.1的A题,Div.2的C题。

题意大概是给两个整数p,q 找出一个数字k符合 :

(p%k==0)&&(k%q!=0)

如果p%q!=0那就直接输出p,否则就要找到最大k值。

想要符合第一个条件(p%k == 0),很简单只需要  k = p / x 即可。

而要使第二个条件 (k%q != 0) 符合,则需要 q 中有 k 没有的质因数。

所以想办法把 k 中彻底除去一个 q 中的质因数,然后判断最大。

#include<bits/stdc++.h>

using namespace std;
const int maxn = 1e6 + 8;
typedef long long ll;

ll p, q;
ll f(ll i)
{
    if (i == 1)
        return 1;
    ll k = p;
    while (k % q == 0)
        k /= i;
    return k;
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        cin >> p >> q;
        if (p % q == 0)
        {
            ll ans = 1;
            ll n = sqrt(q);
            for (ll i = 1; i <= n; i++)
                if (q % i == 0)
                {
                    ans = max(ans, f(i));
                    ans = max(ans, f(q / i));
                }
            cout << ans << endl;
        }
        else
            cout << p << endl;
    }
    return 0;
}
C. Division

 

posted @ 2020-11-02 11:23  Aboicde  阅读(104)  评论(0)    收藏  举报