求1-n所有数的因数个数之和
int r; for(int l=1;l<=n;l=r+1) r=n/(n/l); ans+=(r-l+1)*(n/l);
把所有出现次数相同的因数放在一起。所以才有r=n/(n/l),是为了直接取到所有次数相同的因数,r-l+1,r+1是第一个次数不同的因数所以-l。所以循环是l=r+1。
int r; for(int l=1;l<=n;l=r+1) r=n/(n/l); ans+=(r-l+1)*(n/l);
把所有出现次数相同的因数放在一起。所以才有r=n/(n/l),是为了直接取到所有次数相同的因数,r-l+1,r+1是第一个次数不同的因数所以-l。所以循环是l=r+1。
相关推荐