最近,我翻了一下之前的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程序代码
/********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:AlgorithmStudy.c * 文件标识:无 * 内容摘要:算法学习: 水仙花数+素数+质因数分解 * 其它说明:无 * 当前版本:V1.0 * 作 者:Zhou Zhaoxiong * 完成日期:20150327 * **********************************************************************/ #include #include typedef signed int INT32; typedef unsigned char UINT8; typedef unsigned int UINT32; /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150327 V1.0 Zhou Zhaoxiong 创建 ***********************************************************************/ INT32 main() { UINT32 iBaiWei = 0; // 三位数的百位数字 UINT32 iShiWei = 0; // 三位数的十位数字 UINT32 iGeWei = 0; // 三位数的个位数字 UINT32 iJudgedNum = 0; // 三位数, 从101开始算起 UINT8 iPrimeFlag = 0; // 一个数是否是素数的标识 UINT32 iLoopFlag = 0; // 用于循环中 UINT32 iDaffodilNumber = 0; // 水仙花数 UINT32 iTempNum = 0; // 作为过渡数 for (iJudgedNum = 101; iJudgedNum
编译命令
本程序在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,请扫描以下二维码: