求 1 到 n 的所有数的约数和


 

求 1 到 n 的所有数的约数和

暴力方法就是枚举每个数,算出他的约数和即可,这样有点慢。

另一种思路,枚举约数,判断他是谁的约数,并记录(即他的倍数有多少个),在乘以他自己。

n/i求的是n以内,i的倍数有多少个,在乘以i即可。

可以发现,枚举到n/2时,往后的所有数的倍数只有他自己,n/i = 1(i>n/2),这里可以用数学方法算出。

代码:

 1 #include<cstdio>
 2 
 3 int main()
 4 {
 5     int n,ans = 0;
 6     scanf("%d",&n);
 7     
 8     for (int i=1; i<=n; ++i)
 9     {
10         ans += (n/i)*i;
11     }
12     
13     printf("%d",ans);
14     
15     return 0;
16 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM