hdu2710 Max Factor

来源:互联网 发布:cf手游刷经验软件 编辑:程序博客网 时间:2024/05/18 02:16

题目

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

#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\n",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\n",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\n",loc);}    return 0;}


原创粉丝点击