约数个数函数
记d[i]为i的约数个数,e[i]为i的最小质因子个数。
void solve(){ d[1]=1; for(int i=2;i<=n;i++){ if(!isx[i]){prime[++cnt]=i;d[i]=2;e[i]=1;} for(int j=1;(i*prime[j]<=n)&&j<=cnt;j++){ int v=prime[j];isx[i*v]=1; if(i%v==0) {d[i*v]=d[i]/(e[i]+1)*(e[i]+2);e[i*v]=e[i]+1;break;} else d[i*v]=d[i]*2;e[i*v]=1; } if(d[i]>mx){mx=d[i];ans[++tot]=i;} } }