matlab编程求助-求一个正整数的所有质因数

来源:百度知道 编辑:UC知道 时间:2024/06/16 13:00:12
新手求助 要求做一个类似factor的function, 找出用户输入整数的所有质因数。 例如输入12 则输出 2 2 3
谢谢指教
希望有初级一点的解法。。。非常感谢
刚学这个不几天 很多东西不懂 现在最多也就用个for while和一般的命令
c=[];
while ~isempty(b)
b(~mod(b,b(1)))=[];
这几点看不懂

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的元素都删了。