水仙花数&素数&质因数分解的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,请扫描以下二维码:

 

时间: 2015-04-27
Tags: 算法

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

输出100-1000之间所有的“水仙花数”

查看全套"c语言习题集" 题目: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 1.程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位. 2.程序源代码: #include "stdio.h"#include "conio.h"main(

php中如何求水仙花数优化

水仙花数是指一个n位数(n>=3),它每个位上数字的n次幂之和等于它本身,n为它的位数.(例如:1^3+5^3+3^3 = 153) 水仙花数又称阿姆斯特朗数. 三位的水仙花数有4个:153,370,371,407 四位的水仙花数有3个:1634,8208,9474 五位的水仙花数有3个:54748,92727,93084 六位的水仙花数有1个:548834 七位的水仙花数有4个:1741725,4210818,9800817,9926315 八位的水仙花数有3个:24678050,246780

php实现水仙花数的4个示例分享

 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 3^3+ 5^3 = 153)这篇文章主要介绍了php实现水仙花数的4个示例分享,需要的朋友可以参考下 示例1:    代码如下: <?php for($q=1;$q<=9;$q++){     for($w=0;$w<=9;$w++){       for($e=0;$e<=9;$e++){         if($q*$q*$q + $w*$w*$w + $e*$e*

请问这段水仙花数程序有什么问题

问题描述 请问这段水仙花数程序有什么问题 #includevoid main(){ int a b de=0; for (a = 1:;a++) { do { b = a % 10; d = a / 10; e = e + b*b*b; a = d; } while (d != 0); if (a==e) printf("" %dn""e); }}大神求解答诊断程序在VS2013中没有警告或错误,但是执行时弹出框只是光标在闪烁,没有其他任何数字或字母请问这段程序有什

[华为机试练习题]60.水仙花数

题目 描述: 水仙花数又称阿姆斯特朗数. 水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153) 求输入的数字是否为水仙花数 练习阶段: 初级 代码 /*--------------------------------------- * 日期:2015-07-05 * 作者:SJF0115 * 题目:水仙花数 * 来源:华为机试练习题 ----------------------------------------

C++实现输出三位数字的水仙花数

问题描述 C++实现输出三位数字的水仙花数 水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和. 编程输出3位水仙花数 解决方案 void main() { int n = 100; int a, b, c; for( n=100;n<=999;n++) { a = n/100; b = n/10%10; c = n%10; if ( n==(a*a*a+b*b*b+c*c*c)) { printf("%d %d %dn",a,b,c); } } }

大众点评笔试算法之质因数分解

将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 代码为: // 质因数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<cmath> #include<cstdlib> #include<iostream> using namespace std; void Analyse(int n) { //打印出 int i; for(i = 2;i <= sqrt(stat

水仙花数的vfp实现

水仙花数的实现是一个比较经典的算法题,今天我们首先在vfp中来实现它. 首先我们了解一下什么是"水仙花数".所谓水仙花数是指一个n位数,其各位数字立方和等于该数本身的值,例如:153=13+53+33 ,所以153是一个水仙花数. 我们来做一个简单点儿的:求解3位数的水仙花数,即100至999之间的水仙花数.很明显这个程序需要使用循环,并且从水仙花数的概念可知,其重点是求解出循环变量当前值的各位数字的值.剩下的工作就简单了,把求解出的各位数字的立方和与循环变量当前值进行比较,如果相等则

php实现水仙花数示例分享

 这篇文章主要介绍了php实现水仙花数示例,需要的朋友可以参考下 自幂数,又称阿姆斯特朗数,民间通称水仙花数.实则只有3位自幂数才是水仙花数.4位5位6位等等各有别的叫法. 代码如下: <?php //阿姆斯特朗数:一个k位数,它的每个位上的数字的k次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153) class Armstrong {    static function index(){   for ( $i = 100; $i < 100000; $i++ ) {