又一道 GCD 问题 题解(数论)

题目链接

题目思路

可以直接用\(O(n\sqrt{a_{i}})\)枚举所有元素的约数,

然后搞一下即可

还有一种复杂度更好的方法,利用桶排和埃式筛的思维优化到\(O(a_iloga_i )\)

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const int eps=1e-3;
int n,a[maxn];
int tong[maxn];
int ans[maxn];
signed main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        tong[a[i]]++;
    }
    for(int i=1;i<=1e5;i++){
        int x=0;
        for(int j=i;j<=1e5;j+=i){
            x+=tong[j];
        }
        ans[x]=max(ans[x],i);
    }
    for(int i=n;i>=1;i--){
        ans[i]=max(ans[i],ans[i+1]);
    }
    for(int i=2;i<=n;i++){
        printf("%d%c",ans[i],i==n?'\n':' ');
    }
    return 0;
}

不摆烂了,写题
原文地址:https://www.cnblogs.com/hunxuewangzi/p/14399847.html