紧接着上一个文章,进阶一个因数表,来自牛客网一道比赛题:
打从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 }
如有错误,欢迎评论指出!