紧接着上一个文章,进阶一个因数表,来自牛客网一道比赛题:
打从1到n所有因数的和
代码如下:
#include<cstdio>
#define ll long long
using namespace std; ///返回1->n每个数约数(因子)的个数和,算法sqrt(n);
ll get_f(int n)
{
ll ans=;
for(int i=,temp;i<=n;i=temp+)
{
temp=n/(n/i);///与(n/i)大小相同的最末尾的位置;
ans+=(n/i)*(temp-i+);///当前大小乘以区间个数;
}
return ans;
} int main ()
{
int q;
scanf("%d", &q);
while(q--)
{
int n;
scanf("%d",&n);
printf("%lld\n", get_f(n));
}
return ;
}
如有错误,欢迎评论指出!