求 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