描述
给定一个正整数N,请求出它所有约数的和。 比如,20有6个约数:1,2,4,5,10,20,所以,约数之和是1+2+4+5+10=42。
输入
多组测试数据(不多于500000组),每组数据输入一行,一个正整数N(1≤N≤500000)。输入直至文件结尾。
输出
每组数据输出一行,一个正整数S:表示N的约数之和。
样例输入
1
2
4
8
16
样例输出
1
3
7
15
31
#include<iostream>
using namespace std;
const int Max_N=500000;
int N,DS[Max_N+5];
void Divisor_Sum()
{
for(int i=1;i<=Max_N;i++)
{
int j=i;
while(j<=Max_N)
{
DS[j]+=i;
j+=i;
}
}
}
int main()
{
Divisor_Sum();
while(cin>>N)
{
cout<<DS[N]<<endl;
}
return 0;
}