• [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;
            }
        }
    }
    
  • 相关阅读:
    hust 1605 bfs
    hdu 1512
    2013 ACMICPC 杭州现场赛 I题
    2013年 ACMICPC 杭州赛区H题
    hdu 3717 二分+队列维护
    hdu 2993 斜率dp
    hdu 3480 斜率dp
    hdu 3507 斜率dp
    hdu 2829 斜率DP
    零碎笔记
  • 原文地址:https://www.cnblogs.com/kksk/p/13925280.html
Copyright © 2020-2023  润新知