求 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 }

 

相关文章:

  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-22
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
猜你喜欢
  • 2021-06-08
  • 2021-09-24
  • 2021-06-22
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
  • 2021-12-15
相关资源
相似解决方案