• hdu2710 Max Factor


    题目

    //下面这个是最先用的方法,因为学姐先讲完这个,所以懒得写代码,就将就着这个用,结果搞了老半天,还是错了,心累。。

    #include<stdio.h>
    #include<string.h>
    int prime[5010];
    bool isprime[5010];
    int solve(int n)
    {
        memset(prime,0,sizeof(prime));
        int p=0;
        for(int i=0; i<=n; i++) isprime[i]=true;
        isprime[0]=false;
        for(int i=2; i<=n; i++)
        {
            if(isprime[i])
            {
                prime[p++]=i;
                for(int j=i*2; j<=n; j+=i) isprime[j]=false;
            }
        }
        return p;
    }
    int main()
    {
        int n,T;
        int m=0;
        while(~scanf("%d",&T)){
        int _max=0;
        while(T--)
        {
            scanf("%d",&n);
            int ans = solve(n);
            for(int i=0; i<ans; i++) // printf("%d ",prime[i]);
            {
                for(int j=i+1; j<ans; j++)
                {
                    if(prime[i]*prime[j]==n&&(prime[i]>_max||prime[j]>_max))
                    {
                        _max= prime[i]>prime[j]? prime[i] : prime[j];
                        m=n;
                    }
                }
            }
    
    
        }
        printf("%d
    ",m);
    }
        return 0;
    }




    //然后,反思了一下,还是自己写代码好了,不用之前的那个,可能错就错在先入为主了,然后下面这是又一次的失败尝试:

    #include<stdio.h>
    #include<math.h>
    int _max=0;
    int loc=0;
    bool prime(int n)
    {
        int flag = true;
        for(int i=2;i<=sqrt(n);i++)
        {
            if(n%i==0)
            {
                flag = false ;
                break;
            }
        }
        if(flag==false) return false;
        else
            return true;
    }
    void  solve(int n)
    {
        int m;
        for(m=n-1;m>=1;m--)
        {
            if(prime(m))
            {
         //printf("%d ",m);
                if(n%m==0&&m>_max)
                {
    
    
                    _max=m;
                    loc=n;
                    return;
                }
    
    
            }
        }
    }
    
    
    int main()
    {
        int T,n;
           while(~scanf("%d",&T)){
        while(T--)
        {
            scanf("%d",&n);
            solve(n);
        }
        printf("%d
    ",loc);
        }
        return 0;
    }
    



    //最后百度了一下,然后借鉴到学姐讲的知识终于过了,心累

    #include<stdio.h>
    #include<string.h>
    int  isprime[20010];
    void solve()
    {
        memset(isprime,0,sizeof(isprime));
        isprime[1]=1;
        for(int i=2; i<=20001; i++)
        {
            if(isprime[i]==0)
            {
               for(int j=i; j<=20001; j+=i)
                isprime[j]=i;
            }
        }
    }
    int main()
    {
        int n,T;
        solve();
        while(~scanf("%d",&T)){
        int _max=-1;
        int loc =0;
        while(T--)
        {
            scanf("%d",&n);
            if(isprime[n]>_max)
            {
                _max=isprime[n];
                loc = n;
            }
    
    
        }
        printf("%d
    ",loc);
    }
        return 0;
    }


  • 相关阅读:
    Java基础-Object通用方法
    Java基础-关键字
    Java基础-运算
    Java基础-String
    Java基础-数据类型
    GCN-GAN:对加权动态网络的非线性时间链路预测模型
    长短期记忆(long short-term memory, LSTM)
    CSP 201604-1 折点计数
    介绍一个好东西C++11
    malloc free使用规范
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160292.html
Copyright © 2020-2023  润新知