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; }

浙公网安备 33010602011771号