Divisor Summation
Time Limit: 5 Seconds | Memory Limit: 32768 KB |
---|
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
求n的因子和,先打表
#include<stdio.h>
#include<iostream>
using namespace std;
int f[500005];
int main()
{
int t;
int n;
scanf("%d", &t);
f[0]=f[1]=0;
for(int i=1; i<=500001/2; i++)
{
for(int j=i*2; j<=500001; j+=i)//j只会取i的倍数
{
f[j]+=i;//在f[j]加i就是这个数的因子和
}
}
while(t--)
{
scanf("%d",&n);
printf("%d\n",f[n]);
}
return 0;
}