程序思路:
對n進行分解質因數,應先找到一個最小的質數k,從2開始,然后按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n不等於k,則應打印出k的值,並用n除以k的商,作為新的正整數n,重復執行 (1)。
Matlab實現的程序如下:
clear all
n=input('pelase input the number:') %保存輸入的值
m=2; %從最小的質數2開始
display([num2str(n),'='])
while(1)
if(~mod(n,m)) %找到可以整除的數
k=m;
if(n==k) %找到最后一個質數
display([num2str(n)])
break; %跳出循環
else
n=n/k; %將n除以質數的值繼續循環
m=1; %保證質數還是從2開始
display([num2str(k),'*']) %將分解的質數顯示出來
end
end
m=m+1; %不用擔心m是不是質數,因為能被4或6等整除的,肯定能被2或3這些小的質數整除
end
也可以從另外一個角度寫這個程序:
(1)判斷這個數n本身是不是質數,如果是,則直接打印出來;
(2)如果這個數n不是質數,則找到它最小的質數k,並用n=n/k進行更新,重復(1)過程,直到滿足最后的n是個質數。
本程序存在的問題是:輸出不在同一行,如
pelase input the number:77
77=
7*
11
pelase input the number:11
11=
11
所以如果有好的方法,可以積極留言~~