解析
统计每个值出现的次数,然后对于每个值 x x x 枚举他的因子,这样只需 l o g ( x ) log(x) log(x)次即可得到以 x x x 为最大值的等比数列长度
注意特判,公比为 1 1 1 的情况
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f
const int mod=1e9+7;
const int N=2e5+5;
int n,m;
int a[N];
map<int,int>mp;
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]]++;
}
int ans=0;
for(auto it:mp){
ans=max(ans,it.second);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
int x=a[i];
for(int j=2;j<=x/j;j++){
if(x%j==0){
int cnt=1,t=x;
while(t%j==0&&mp.count(t/j)&&j>1){
cnt++;
t/=j;
}
ans=max(ans,cnt);
if(x/j!=j){
int cnt=1,t=x;
while(t%(x/j)==0&&mp.count(t*j/x)){
cnt++;
t/=(x/j);
}
ans=max(ans,cnt);
}
}
}
}
cout<<ans;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int tt=1;
// cin>>tt;
while(tt--) solve();
return 0;
}