这是一段获得了100分的代码,好像并没有什么问题。
s2 svphi(signed now){
if(now<=N32)return {phi[now],mu[now]};
if(hsh1[R(now)])return {hsh1[R(now)],hsh2[R(now)]};
int ret1=now*(now+1)/2,ret2=1;
for(signed l=2,r;l<=now;l=r+1){
r=(now/(now/l));
s2 sn=svphi(now/l);
ret1-=(r-l+1)*sn.a;
ret2-=(r-l+1)*sn.b;
}
return {hsh1[R(now)]=ret1,hsh2[R(now)]=ret2};
}
但下面这个驴唇不对马嘴的代码能获得99分,只是最后一个点有一点慢。
s2 svphi(signed now){
if(now<=N32)return {phi[now],mu[now]};
if(hsh1[R(now)])return {hsh1[R(now)],hsh2[R(now)]};
int ret1=now*(now+1)/2,ret2=1;
for(signed l=2,r;l<=n;l=r+1){
r=(n/(n/l));
s2 sn=svphi(now/l);
ret1-=(r-l+1)*sn.a;
ret2-=(r-l+1)*sn.b;
}
return {hsh1[R(now)]=ret1,hsh2[R(now)]=ret2};
}
我陷入了沉思,这是啥情况?now和n写乱到底为什么问题如此之小?
这告诉我们,哪怕你就剩一个点,你也可能是写挂了(