题解区绝大多数是输出 log2i+1,我是直接枚举因数,取其中最大的再加一。有没有大神可以证明我的方法的正确性:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,ans[200010];
int getans(int x){
if(x==1) return 1;
int cnt=0;
for(int i=1;i*i<=x;i++){
if(x%i==0) cnt=max(cnt,ans[i]),cnt=max(cnt,ans[x/i]);
}
return cnt+1;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++) ans[i]=getans(i),cout<<ans[i]<<" ";
cout<<endl;
return 0;
}