算法一:速度较慢
n=input('n=');
tic
p=2;
s=1;
k=0;
while p<=n %循环直到n=1,此时p为最大质因子,k为相应次数
if mod(n,p)==0
k=k+1;
n=n/p;
else
if k>0
s=s*((p^(k+1)-1)/(p-1));
end
p=p+1;
k=0;
end
end
s=s*((p^(k+1)-1)/(p-1));
disp(s)
time4=toc
当面对有较大质因子时运算速度较慢
算法二:较复杂 速度较快
n=input('n=');
tic
s=1;
p=2;
k=0;
while p*p<=n %当循环结束时,有三种情况,n==p,p^2>n&&p|n,p^2>n&&p不是n的质因子
if mod(n,p)==0
flag=1;
n=n/p;
k=k+1;
else
flag=-1;
if k>0&&flag==-1
s=s*(p^(k+1)-1)/(p-1);
k=0;
end
p=p+1;
end
end
if n==p %对应情况一
k=k+1;
s=s*((p^(k+1)-1)/(p-1));
elseif flag==-1 %对应情况二
s=s*((n^2-1)/(n-1));
else %对应情况三
s=s*((p^(k+1)-1)/(p-1));
s=s*((n^2-1)/(n-1));
end
disp(s)
time1=toc
算法三 简洁也最快
n=input('n=');
p=2;
s=1;
while p*p<=n
k=0;
while mod(n,p)==0
k=k+1;
n=n/p;
end
if k>0
s=s*((p^(k+1)-1)/(p-1));
end
p=p+1;
end
if(n>1)
s=s*(n+1);
end
disp(s);