描述
给定一个正整数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; }