因数表进阶:1--x的因数和

紧接着上一个文章,进阶一个因数表,来自牛客网一道比赛题:

    打从1到n所有因数的和

代码如下:

 1 #include<cstdio>
 2 #define ll long long
 3 using namespace std;
 4 
 5 ///返回1->n每个数约数(因子)的个数和,算法sqrt(n);
 6 ll get_f(int n)
 7 {
 8     ll ans=0;
 9     for(int i=1,temp;i<=n;i=temp+1)
10     {
11         temp=n/(n/i);///与(n/i)大小相同的最末尾的位置;
12         ans+=(n/i)*(temp-i+1);///当前大小乘以区间个数;
13     }
14     return ans;
15 }
16 
17 int main ()
18 {
19     int q;
20     scanf("%d", &q);
21     while(q--)
22     {
23         int n;
24         scanf("%d",&n);
25         printf("%lld
", get_f(n));
26     }
27     return 0;
28 }

如有错误,欢迎评论指出!

化繁为简 大巧不工
原文地址:https://www.cnblogs.com/mpeter/p/9531956.html