首页 > 其他 > 详细

求前n个正整数的约数之和

时间:2020-04-25 17:24:31      阅读:82      评论:0      收藏:0      [点我收藏+]

求\(\sum_{i=1}^{n}\sigma \left ( i\right ),i\leq 10^{12},\sigma \left ( n\right )=\sum_{d|n}d\)

解:\(\sum_{i=1}^{n}\sigma \left ( i\right )=\sum_{i=1}^{n}\sum_{d|i}d=\sum_{i=1}^{n}\sum_{d=1}^{n}\left [ d|i\right ]*d=\sum_{i=1}^{n}i*\sum_{i=1}^{n}\left [ i|d\right ]=\sum_{i=1}^{n}i*\left \lfloor \frac{n}{i}\right \rfloor\)

代码:

 1 ll n,ans;
 2 int main()
 3 {
 4     scanf("%lld",&n);
 5     for(ll l=1ll,r;l<=n;l=r+1ll){
 6         r=min(n/(n/l),n);
 7         ans = ans + (n/l)*((l+r)*(r-l+1)/2);
 8     }
 9     printf("%lld\n",ans);
10     return 0;
11 }

也可以这样化简:

\(\sum_{i=1}^{n}\sum_{d|n}d=\sum_{i=1}^{n}\sum_{d=1}^{\left \lfloor \frac{n}{i}\right \rfloor}d=\sum_{i=1}^{n}\frac{\left ( 1+\left \lfloor \frac{n}{i}\right \rfloor\right )*\left \lfloor \frac{n}{i}\right \rfloor}{2}\)

\(\sum_{i=1}^{n}\frac{\left ( 1+\left \lfloor \frac{n}{i}\right \rfloor\right )*\left \lfloor \frac{n}{i}\right \rfloor}{2}=\sum_{i=1}^{n}i*\left \lfloor \frac{n}{i}\right \rfloor\)

求前n个正整数的约数之和

原文:https://www.cnblogs.com/wsy107316/p/12773987.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!