SPOJ DIVSUM Divisor Summation

DIVSUM - Divisor Summation

#number-theory

Given a natural number n (1 <= n <= 500000), please output the summation of all its proper divisors.

Definition: A proper divisor of a natural number is the divisor that is strictly less than the number.

e.g. number 20 has 5 proper divisors: 1, 2, 4, 5, 10, and the divisor summation is: 1 + 2 + 4 + 5 + 10 = 22.

 

Input

An integer stating the number of test cases (equal to about 200000), and that many lines follow, each containing one integer between 1 and 500000 inclusive.

Output

One integer each line: the divisor summation of the integer given respectively.

Example

Sample Input:
3
2
10
20

Sample Output:
1
8
22

Warning: large Input/Output data, be careful with certain languages

打表

#include <cstdio>
using namespace std;

int t, n;
int sum[500100];

int main()
{
    scanf("%d", &t);
    for (int i = 1; i <= 500000; i++){
        for (int j = 2; i * j <= 500000; j++){
            sum[i * j] += i;
        }
    }
    while (t--){
        scanf("%d", &n);
        printf("%d\n", sum[n]);
    }
    return 0;
}


你可能感兴趣的:(SPOJ DIVSUM Divisor Summation)