首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言實例練習

C語言練習實例19:求1000以內完數(完全數)

     編輯:C 語言實例練習

C語言練習實例19:求1000以內完數(完全數)

完數:等於其真因數(不含自身)之和。如 6=1+2+3。本例找出 1000 以內所有完數並打印分解式。

源代碼

// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#define N 1000

int main() {
    int i, j, k, n, sum;
    int a[256];
    for (i = 2; i <= N; i++) {
        sum = a[0] = 1;
        k = 0;
        for (j = 2; j <= i/2; j++)
            if (i % j == 0) {
                sum += j;
                a[++k] = j;
            }
        if (i == sum) {
            printf("%d=%d", i, a[0]);
            for (n = 1; n <= k; n++) printf("+%d", a[n]);
            printf("\n");
        }
    }
    return 0;
}

運行結果

6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248

數學背景

已知完數對應梅森素數:2^(p-1)*(2^p-1),p 為使 2^p-1 為素數的指數。1000 以內僅有這三個。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved