文档章节

小蚂蚁学习C语言(37)——题目——求出1000以内的所有完数以及它的因子

嗜学如命的小蚂蚁
 嗜学如命的小蚂蚁
发布于 2016/01/28 19:20
字数 520
阅读 309
收藏 1

编写程序:

    输出1000以内的所有完数及其因子。所谓完数是指一个整数的值等于它的因子之和,例如6的因子是1,2,3,而6=1+2+3,故6是一个完数。

/*
	求出1000以内的所有完数以及它的因子
*/
# include <stdio.h>

int main( void )
{
	int i, j, sum;
	
	/*
		第一个循环,检查从1到1000中的每一个数字是不是完数
		如果是完数,输出完数和它所有的因子
	*/
	for( i = 1; i <= 1000; ++i )
	{
		/*
			检查该数字是否是完数
			方法:从1到i-1,依次取余,余数为0,说明是它的公约数,
				累加公约数,最后的值如果等于i,这说明i就是完数。
		*/
		sum = 0;
		for( j = 1; j < i; ++j )
		{
			if( i%j == 0 )
			{
				sum += j;
				
			}
		}
		if( sum == i )
		{
			printf( "完数是:%d,它的因子是:", i );
			
			/* 
				这个for循环是将其所有因子取出
				和第22行的for循环思路是一样的		
			*/
			for( j = 1; j < i; ++j )
			{
				if( i%j == 0 )
				{
					printf( "%d ", j );
				}
			}
			
			printf( "\n" );
		}
		
	}
	
	return 0;
}
/*
	VC++6.0输出的结果是
	=================================================
	完数是:6,它的因子是:1 2 3
	完数是:28,它的因子是:1 2 4 7 14
	完数是:496,它的因子是:1 2 4 8 16 31 62 124 248
	=================================================
	总结:
		完数很轻松的就输出出来了,怎么把因子给分别输出出来让我想来半天。
		其实很简单,脑子一下子没转过来弯
		第10行的for循环,就是把它的因子相加,得到的sum,一旦sum成立,
		说明拿到的所有j都是因子,在第20行输出完数之后,再把第10行for循环
		拿到的所有j,输出就完事了。
		(虽然感觉时间复杂度好高~~~~(>_<)~~~~)
		
*/

    时间复杂度确实好高,不知道还有没有更好的办法来实现这个程序。

    

    学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog



© 著作权归作者所有

共有 人打赏支持
嗜学如命的小蚂蚁
粉丝 137
博文 161
码字总数 100864
作品 0
郑州
程序员
小蚂蚁学习C语言(29)——C语言补码(下)

解释以下问题: vc++6.0中一个int类型的变量所能存储的数字的范围是多少 int 类型变量所能储存的最大整数用十六进制表示是: 7FFFFFFF int 类型变量所能存储的绝对值最大的负整数用十六进制表...

嗜学如命的小蚂蚁
2015/12/25
44
0
C语言编程——有趣的数(使用动态规划实现)

虽然大三上学期学习了动态规划算法,可也只是简单地了解什么是动态规划算法,纸上谈兵而已,并没有真正地将这种算法运用到解题中,没有真正体会到动态规划算法的妙处。最近在准备CCF,有一道...

风一样的程序媛
2016/04/05
377
0
各种基本算法实现小结(七)—— 常用算法

各种基本算法实现小结(七)—— 常用算法 (均已测试通过) ====================================================================== 1、判断素数 测试环境:VC 6.0 (C) #include include...

长平狐
2013/01/06
183
0
考研复试系列——第九节 数论基础

考研复试系列——第九节 数论基础 引言 该部分内容来源于 《王道论坛》 。 写个算法,对 2 个小于 1000000000 的输入,求结果。 特殊乘法举例:123 45 = 14 +15 +24 +25 +34+3*5 样例输入: ...

cassiepython
2017/03/09
0
0
编程题——31~40

三十一、连续子数组的最大和 输入一个整数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 三十二、从1到n整数中...

thanatos_y
2016/07/26
13
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
31分钟前
15
6
arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
今天
4
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
5
1
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
186
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部