Divisor Summation
Description
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:321020Sample Output:1822
Warning: large Input/Output data, be careful with certain languages
解題思路:
計算每個因子的貢獻。 AC代碼:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const int N = 500005;ll dp[N];void init(){ for(int i = 1; i < N; ++i){ for(int j = 2*i; j < N; j+=i){ dp[j] += i; } }}int main(){ int n; memset(dp, 0, sizeof(dp)); init(); int T; scanf("%d", &T); while(T--){ scanf("%d",&n); printf("%lld\n", dp[n]); } return 0;}