[Codeforces Round #680] C. Division

Posted kksk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Codeforces Round #680] C. Division相关的知识,希望对你有一定的参考价值。

Codeforces Round #680

C. Division


首先判断pi能否整除qi,不能这答案就是pi,否则,将(q_i)分解质因数,将qi的每个因子从pi中剔除成不能被(q_i)整除的数,pi剔除完后就是(x_i),且(x_i)不能被(q_i)。记录个最大的(x_i)

举例说明 (p_i=36)(q_i=12)(p_i=2 imes2 imes3 imes3) , (q_i=2 imes2 imes3),将qi的每个因子 (2) ,(2), (3)从pi中剔除成为不能被(q_i)整除,即是每个(x_i),记录下最大的(x_i)

#include <iostream>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
const int N=1e9;
int t,isprime[100000];
ll p,q;
vector <ll> v;
vector <pair<ll,ll> >z;
pair<ll,ll>tmp;
void sieve(){
    for(int i=0;i<=sqrt(N);i++)
        isprime[i]=true;
    isprime[0]=isprime[1]=false;
    for(int i=2;i<=sqrt(N);i++){
        if(isprime[i]){
            v.push_back(i);
            for(int j=i+i;j<=sqrt(N);j+=i){
                isprime[j]=false;
            }
        }
    }
}
int main(){
    cin>>t;
    sieve();
    while(t--){
        cin>>p>>q;
        ll go=q;
        z.clear();
        for(int i=0;i<v.size();i++){
            int ok=0;
            while(q%v[i]==0){
                ok++;
                q/=v[i];
            }
            if(ok){
                z.push_back({v[i],ok});
            }
        }  
        if(q!=1){
            z.push_back({q,1});
        }
        if(p%go!=0){
            cout<<p<<endl;
        }else{
            ll ans=0;
            for(int i=0;i<z.size();i++){
                //cout<<"z="<<z[i]<<" "<<p<<endl;
                tmp=z[i];
                ll lin=p,zz=tmp.first,cnt=tmp.second-1;
                while(lin%zz==0){
                    lin/=zz;
                }
                while(cnt--){
                    lin*=zz;
                }
                ans=max(ans,lin);
            }
            cout<<ans<<endl;
        }
    }
}

以上是关于[Codeforces Round #680] C. Division的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 680B B. Bear and Finding Criminals(水题)

codeforces 680A A. Bear and Five Cards(水题)

codeforces 680E Bear and Square Grid 巧妙暴力

Codeforces Global Round 19

Codeforces Educational Codeforces Round 67

Codeforces Round 1132Educational Round 61