编写程序:spa
输出1000之内的全部完数及其因子。所谓完数是指一个整数的值等于它的因子之和,例如6的因子是1,2,3,而6=1+2+3,故6是一个完数。
.net
/* 求出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,输出就完事了。 (虽然感受时间复杂度好高~~~~(>_<)~~~~) */
时间复杂度确实好高,不知道还有没有更好的办法来实现这个程序。
code
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blogblog