zoukankan      html  css  js  c++  java
  • GG选题

    http://acm.buaa.edu.cn/problem/431/

    DP 分解质因数,复杂度O(10N)。100000以内的数的质数因子不超过10个。转化为记录质因数个数的最大值。

    View Code
    const int MM = 22222;
    const int PP = 100005;
    int N, ans;
    bool isp[PP];
    int p[PP],cnt;
    int pt[PP],cc;
    int dp[PP];
    int num[MM];
    
    void get_p() {
        int i,j,k;
        memset(isp,true,sizeof(isp));
        isp[0]=isp[1]=false;
        for(i=2;i<400;i++) {
            if(isp[i]) {
                for(j=i*i;j<PP;j+=i) isp[j]=false;
            }
        }
        cnt=0;
        for(i=2;i<PP;i++) if(isp[i]) p[cnt++]=i;
    }
    
    void get_data() {
        int i,j,k;
        scanf("%d",&N);
        for(i=0;i<N;i++) scanf("%d",&num[i]);
    }
    
    void gao(int x) {
        int i,j,k;
        cc=0;
        for(i=0;p[i]*p[i]<=x;i++) {
            if(x%p[i]==0) {
                pt[cc++]=p[i];
                while(x%p[i]==0) x/=p[i];
            }
        }
        if(x>1) pt[cc++]=x;
        int mx=-1;
        for(i=0;i<cc;i++) {
            dp[pt[i]]++;
            if(mx==-1||mx<dp[pt[i]]) mx=dp[pt[i]];
        }
        for(i=0;i<cc;i++) dp[pt[i]]=f_max(mx,dp[pt[i]]);
        ans=f_max(ans,mx);
    }
    
    void solve() {
        int i,j,k;
        memset(dp,0,sizeof(dp));
        ans=1;
        for(i=0;i<N;i++) gao(num[i]);
        printf("%d\n",ans);
    }
    
    int main() {
        get_p();
        int ca; scanf("%d",&ca);
        while(ca--) get_data(),solve();
    }
  • 相关阅读:
    junit单元测试
    方法引用
    方法引用表达式(1)
    Stream流的常用方法
    Stream流
    综合案例:文件上传
    tcp通信协议
    python 生成器与迭代器
    Python 序列化与反序列化
    python 文件操作
  • 原文地址:https://www.cnblogs.com/zhang1107/p/2839121.html
Copyright © 2011-2022 走看看