问题标题: 酷町堂:各位大佬帮我看看我的代码为什么错了 寻找质因数 1062

0
0
已解决
被禁言 姚段瑞
姚段瑞
新手守护
新手守护

题目链接: 酷町堂:1062

/*我的代码*/ 
#include<iostream>
#include<cmath>
using namespace std;
int n,a[20005],t[5005],maxn,b[20005];
int main(){
    for(int i=2;i<=20000;i++){
        if(!b[i]){
            for(int j=2*i;j<=20000;j+=i){
                b[j]=1;
                a[j]=max(a[j],i);
            }
        }
    }
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t[i];
        if(!a[t[i]])
            a[t[i]]=t[i];
        maxn=max(a[t[i]],maxn); 
    }
    for(int i=1;i<=n;i++){
        if(maxn==a[t[i]]){
            cout<<t[i];
        }
    }
    return 0;
}
/*正确代码*/ 
#include<iostream>
#include<cmath>
using namespace std;
int n,t;
int tmp;
int maxn;
int ans;
int main(){
    cin>>n;
    while(n--){
    cin>>t;
    tmp=0;
    int a=t;
        for(int i=2;i<=sqrt(t);i++){
            while(t%i==0){
                tmp=i;
                t/=i;
            }
        }
        if(t!=1)
            tmp=t;
        if(tmp>maxn){
            maxn=tmp ;
            ans=a;
        }
    }
    cout<<ans;
    return 0;
}


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

本题不需要用埃氏筛或者效率更高的,会太麻烦

直接使用普通方法求出最大的那个质因数就可以了(比较类似于质数判断,但是找到有一个数可以整除并不要直接结束,而是用maxn直接等,然后while直到这个数不可以整除为止,此部分建议写函数)

0
我要回答