此代码使用matlab编程
Problem21所用时间为8.6064秒
Problem21的答案为31626%题目21:计算10000以下所有相亲数之和
%标记法
function Output=Problem21(Input)
tic
if nargin==0
Input=10000;
end
Sum=0;
One=2:Input;
Flag=zeros(1,Input-1);%用标记法
for ii=1:Input-1
if Flag(ii)==0
Other=sum(Factor_Num(One(ii)));
if sum(Factor_Num(Other))==One(ii)&&Other~=One(ii);
Sum=Sum+One(ii)+Other;
end
Flag(ii)=1;
if isempty(find(One==Other, 1))==0
Flag(One==Other)=1;
end
end
end
Output=Sum;
disp('此代码使用matlab编程')
disp(['Problem21所用时间为',num2str(toc),'秒'])
disp(['Problem21的答案为',num2str(Output)])
end
%% 子程序
%输入一个数得到一个数的真因子的序列(乱序)。
function Output=Factor_Num(Input)
if nargin==0
Input=10000;
end
Start=2;
Stop=Input-1;
Rank=[];
while (Stop>Start)
for ii=Start:Stop
if mod(Input,ii)==0
if Input==ii^2
Temp=[Rank,ii];
else
Temp=[ii,Rank,Input/ii];
end
Rank=Temp;
Start=ii+1;
Stop=Input/ii-1;
break
else
Start=Start+1;
Stop=Stop-1;
end
end
end
Output=[1,Rank];
end
|