Divisor Summation
Description
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 divisorthat is strictly less than the number.
e.g. number 20 has 5 proper divisors: 1, 2, 4, 5, 10, and thedivisor summation is: 1 + 2 + 4 + 5 + 10 = 22.
Input
An integer stating the number of test cases, and that many linesfollow each containing one integer between 1 and 500000.
Output
One integer each line: the divisor summation of the integergiven respectively.
Sample Input
3
2
10
20
Sample Output
1
8
求一个数的的约数,暴力的话,当m很大时,一定会超时,做法:类似于打表,求一个大范围内
从1开始每个数对应的约数之和都算出来存放在数组a中,算的话也有技巧
#include<stdio.h> int a[500001]={0}; int main() { int n,m,i,j,sum; for(i=1;i<=250000;i++) for(j=2;i*j<500001;j++) { //i=1,j=6时a[i*j]+=a[6]+=1; a[i*j]+=i;//i=2,j=3时a[i*j]+=a[6]+=2; } //i=3.j=2时 。。。.=a[6]+=3 ; scanf("%d",&n); // a[6]=1+2+3=5; while(n--) //其他的以此类推。。。。 { scanf("%d",&m); printf("%d\n",a[m]); } return 0; }