第1个回答 推荐于2018-04-05
function c=myfactor(a)
b=2:sqrt(a);
c=[];
while ~isempty(b)
if mod(a,b(1))
b(~mod(b,b(1)))=[];
continue;
else
c=[c,b(1)];
a=a/b(1);
b(b>sqrt(a))=[];
end
end
c=[c,a];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
这还不初级啊,没用用到任何matlab中自带的关于素数的函数,全部自己找出来,你还想怎么个初级法?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c=[]就是令c为空矩阵,以后会慢慢加进去
isempty是判断矩阵是否为空的命令,~是取反,即原来是0的变成1(即T),非0的变成0(即F),while ~isempty(b)就是当b不空时循环。
mod是取模,
if mod(a,b(1))就是如果a不被b(1)整除
~mod(b,b(1))就是如果b中能被b(1)整除就为1,否则为0.(因为前面取了个反)
b(~mod(b,b(1)))=[]的意思就是把b中能被b(1)整除的那些元素都删了。因为那些都不是素数,除了b(1),但b(1)又不被a整除,即不是a的因子,所以也删掉。 continue什么意思应该知道的吧
然后如果a能够被b(1)整除的话那么b(1)就是a的素因子了,把它放到矩阵c中
b(b>sqrt(a))=[]的意思也是吧b中大于根号a的元素都删了。本回答被提问者和网友采纳