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;
}


原文地址:https://www.cnblogs.com/qie-wei/p/10160292.html