开发者社区> 周兆熊> 正文

水仙花数&素数&质因数分解的C语言实现

简介: 最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找“水仙花数”、判断某数是否为素数、对一个数进行质因数分解。我想把这三个东西放到一个程序中,便写下了此文。
+关注继续查看

最近,我翻了一下之前的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,请扫描以下二维码:

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C语言实现学生成绩管理系统
本文提供一例C语言实现的命令行学生信息管理系统,供初学者参考。
48 0
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
70 0
造轮子之-C语言实现ArrayList
造轮子之-C语言实现ArrayList
27 0
c语言实现扫雷(含循环递归展开)
本笔记通过c语言实现扫雷小游戏(包含递归展开) 游戏实现逻辑位于test.c文件,整个游戏头文件位于game.h,游戏进程的具体操作于game.c中实现。
38 0
c语言实现三子棋(内含阅读思路,简单易实现)
本文如果按顺序来阅读可能不太好接受,建议阅读顺序为,由test.c的逻辑顺序读下去,遇见具体函数的实现跳转到game.c中来理解
30 0
C语言连接并实现对MySQL的增删改查
C语言访问数据库并不如Java、Python那般容易。本文介绍C语言连接并实现对MySQL的增删改查的方法。
84 0
c语言实现二进制八进制十进制和十六进制的相互转化
c语言实现二进制八进制十进制和十六进制的相互转化
55 0
c语言实现简单学生管理系统
该学生管理系统的实现是通过分文件的方式来写的,infor.h文件为头文件,源文件infor.c实现源文件test.c中封装函数,建议读者在做较大的系统是分文件来实现,可以提高代码的运行效率。
38 0
【指针进阶三】实现C语言快排函数qsort&回调函数
【指针进阶三】实现C语言快排函数qsort&回调函数
25 0
【让你从0到1学会c语言】字符串函数详解及模拟实现(二)
【让你从0到1学会c语言】字符串函数详解及模拟实现(二)
23 0
+关注
周兆熊
硕士研究生毕业于南京邮电大学计算机应用技术专业,曾在中兴通讯从事软件开发工作,现就职于重庆某物联网技术公司,任高级嵌入式软件开发工程师。著有《C程序员从校园到职场》一书,同时也是《信息通信技术百科全书》的编者之一及CSDN博客专家。QQ(微信):245924426。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载