Solution of ZOJ 2095 Divisor Summation (Online Version)

Give a natural number n (1 <= n <= 500000), please tell 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, and that many lines follow each containing one integer between 1 and 500000.


Output

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


Sample Input

3
2
10
20


Sample Output

1
8
22


Source: ZOJ Monthly, March 2004

分析:此题关键点在I/O部分,如果是用C++标准库中的cin和cout对象,则将超时。网上提供的大部分算法都是基于查表的方法,这里给出一个我实现的可Accept的online算法,所占内存只需188KB。

 

#include <iostream> #include <cstdio> #include <cmath> using namespace std; int proper_div_sum( int n ) { int sum = 1; for( int i = (int)sqrt(n * 1.0); i > 1; --i ) { if( n % i == 0 ) { sum += i; if( n / i != i ) sum += n / i; } } if( n == 1 || n == 0) { printf("0/n"); //sum = 0; } else printf( "%d/n", sum ); return sum; } int main() { int n; scanf("%d", &n ); while( scanf("%d", &n ) != EOF ) { proper_div_sum(n); } return 0; }

你可能感兴趣的:(算法,Integer,less,div,each,output)