zoukankan      html  css  js  c++  java
  • Orac and LCM

    唉!!惨淡~~

    题面:

     题解:这道题,比赛马上结束的时候知道怎么写了....,但是码力不够,实现不了...

    对每个数分解质因子,考虑质因子p,设每一个元素都含有p,(不包含的话可以让p的个数为0),那么任意两个元素的LCM,p的个数一定是取多的那个,所以我们只要取p的第二小的元素就可以了,该怎么实现呢?可以用将每个元素分解后的质因子的个数放到vector中,如果当前质因子出现的次数等于n,那就取最小,如果当前质因子出现的次数为n-1,那就取最小的那个了(因为有一个元素对应的该质因子的个数为0),如果当前质因子的个数小于n-1,那就不用取该质因子了。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+7;
    ll arr[N];
    vector<ll >ve[N];
    ll p=0;
    void fenjie(ll x){
        ll c=sqrt(x);
        for(ll i=2;i<=c;i++){
            if(x%i==0){
                p=max(p,i);
                ll cnt=0;
                while(x%i==0){
                    x/=i;cnt++;
                }
                ve[i].push_back(cnt);
            }
        }
        if(x!=1){
            p=max(p,x);
            ve[x].push_back(1);
        }
    }
    ll ksm(ll x,ll y){
        ll res=1;
        while(y){
            if(y&1) res=res*x;
            x=x*x;
            y>>=1;
        }
        return res;
    }
    int main(){
        ll n,x;
        cin>>n;
        for(ll i=1;i<=n;i++){
            cin>>x;fenjie(x);
        }
        ll ans=1;
        for(ll i=2;i<=p;i++){
            if(ve[i].size()==n){
                sort(ve[i].begin(),ve[i].end());
                ans=ans*ksm(i,ve[i][1]);
            }
            else if(ve[i].size()==n-1){
                sort(ve[i].begin(),ve[i].end());
                ans=ans*ksm(i,ve[i][0]);
            }
        }
        cout<<ans<<endl;
        return 0;
    } 

     打比赛心态一定要好,继续加油吧!!!

  • 相关阅读:
    聊天工具分享bug
    Git命令查看代码提交次数
    短链接生成实例
    .Net MVC用户注册验证码
    js写验证码
    笔记
    jq获取数组中的某个字段拆分成字符串。
    IIS部署后中文Cookie乱码
    C#反射(Reflection)与特性(Attribute)实例
    jmm
  • 原文地址:https://www.cnblogs.com/Accepting/p/12882524.html
Copyright © 2011-2022 走看看