編寫程序: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