C語言 分解質因數

2013-05-01 6:19 am
#include<stdio.h>
int main(void)
{
int num;
int i;
scanf("%d",&num);
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0 && num/i!=1)
{
printf("%d*",i);
num=num/i;
i=1;
}
}
printf("%d",num);
return 0;
}

可否解釋一下何解要用到以下兩句??
num=num/i;
i=1;


than

回答 (1)

2013-05-01 9:52 pm
✔ 最佳答案
首先你要明白整個概念!
num是要解的數字,而每次用i試除,餘數為0即可整除,亦即當時i為因子。而i會由2試至num的開方(因為因子不可能大過其開方)。
當你成功找到一個因子,num須改為除因子的餘下數值,繼續找。
例如num開始為 24,第一個數字2已是因子,所以會是2x12,num=num/i即是把num由24改為12,而num為12又再次重複做找因子的loop。
至於i=1那一句意思是重設i為1,因下一次要由2開始再找因子。(因為for loop完結時會做i++)。
其實這個例子不太好,因
(1)大部份情況for loop用的control variable最好不要自行修改,(有些language甚至係不准改)
(2)找到第一個因子之下一個loop最小值係當時的i,無須浪費時間由2開始。
例子,175,第一個因子為5,得出5x35,找35的因字,可以由5開始,不須由2。
(3)測試中的i無須由2,3,4,5,6試,因為除了2之外,偶數一不是因子,所以除2外,可以用i+2試,即係3,5,7,9,11,試除的動作可以減少一半。
提議修正方法,(1)及(3)把for loop改為while,(2)須加一個variable記住最後找到的因子,i重設時可以定為因子減1。


收錄日期: 2021-04-26 11:34:53
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20130430000051KK00327

檢視 Wayback Machine 備份