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

编写程序:

    输出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



转载于:https://my.oschina.net/woshixiaomayi/blog/611071

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值