题目描述
给你一个数N,需要你算出这个数所有约数的和。(N的约数指能整除N的正整数),例如12的约数有1,2,3,4,6,12。所以约数和为1+2+3+4+6+12=28
输入
本题有多组数据,第一行一个T,表示有T组数据,下面T行,每行一个正整数N表示要处理的数。
输出
T行,每行一个正整数表示输入中对应的数的约数和。
记录每一个上一次找过的数,如果有重复的直接输出,然后会出现j*j=x的情况,这是只用加一个就可以了
var
f:array[-1..10000000] of int64;
i,j,k,n,m,s:longint;
begin
readln(n);
for i:=1 to n do
begin
readln(m);
if f[m]=0 then
begin
for j:=1 to trunc(sqrt(m)) do
begin
if m mod j=0 then
if j*j=m then f[m]:=f[m]+j else
f[m]:=f[m]+j+m div j;
end;
end;
writeln(f[m]);
end;
end.
]]>

Comments NOTHING