標籤:
最近,我翻了一下之前的C語言教材,看了三個有意思的小程式,包括:尋找“水仙花數”、判斷某數是否為素數、對一個數進行質因數分解。我想把這三個東西放到一個程式中,便寫下了此文。
演算法步驟
1. 尋找“水仙花數”。
“水仙花數”是指一個三位元,其各位元字的立方和等於該數本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。
2. 判斷某數是否為素數。
素數是指只能被1和它本身整除的數,判斷一個數是否為素數的方法:用這個數分別去除以2到這個數的平方根,如果能被整除,則表明此數不是素數,反之是素數。
3. 對一個數進行質因數分解。
對一個數n進行質因數分解,應先找到一個質數k(從最小的2開始),然後按下述步驟進行:
(1) 如果這個質數恰好等於n,則說明分解質因數的過程已經結束。
(2) 如果n不等於k,但n能被k整除,則應用n除以k的商作為新的正整數n,重複執行第一步。
(3) 如果n不能被k整除,則用k+1作為k的新值,重複執行第一步。
本程式流程
本程式分三步走:第一步,尋找“水仙花數”;第二步,判斷找到的“水仙花數”是否是素數;第三步,如果不是素數,則對這個數進行質因數分解。
C程式碼
編譯命令
本程式在Linux下進行編譯,編譯命令為:gcc -g -o AlgorithmStudyAlgorithmStudy.c –lm。
注意,不要忽略了“–lm”,否則編譯時間會報錯,提示找不到“sqrt”。
程式運行結果
編譯成功之後,執行“AlgorithmStudy”命令,結果如下:
153是一個水仙花數.
153不是素數.
153=3*3*17
------
370是一個水仙花數.
370不是素數.
370=2*5*37
------
371是一個水仙花數.
371不是素數.
371=7*53
------
407是一個水仙花數.
407不是素數.
407=11*37
------
---------------------------------------------------
本人公眾號:zhouzxi,請掃描以下二維碼:
水仙花數&素數&質因數分解的C語言實現