作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/29 07:59:50
matlab编程求助-求一个正整数的所有质因数
要求做一个类似factor的function,找出用户输入整数的所有质因数.例如输入12 则输出 2 2 3
希望有初级一点的解法.
刚学这个不几天 很多东西不懂 现在最多也就用个for while和一般的命令
c=[];
while isempty(b)
b(~mod(b,b(1)))=[];
这几点看不懂
matlab编程求助-求一个正整数的所有质因数
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的元素都删了.