题目描述
给你一个数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