C语言和Matlab实现: 一个正整数恰好等于它的所有正整数因子之和,这个数就称为完数,如:6的因子1, 2, 3,而6 = 1 + 2 + 3,因此6就是一个完数,编程找出2000内的所有的完数,并

本文分享了使用C语言和Matlab实现查找1到2000之间的完数,并打印其因子的两种代码思路。通过对比,展示了如何优化代码结构,使因子查找和打印更加高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

以下两种代码思路是一模一样的,相当于用matlab翻译了一遍c语言版本的代码。
即先遍历找出完数,再在找出时利用循环打印出因子。先前我纠结于在利用因子相加查找完数时便要将因子存储起来,后来参考了一些代码发现了更易实现的方法,就是查找之后再找一遍因子并打印。这样就容易多了。

C语言实现

代码

#include<stdio.h>
int main(){
    int i,j,s,k,tag;
    for(i=1;i<=2000;i++){
        s=0;
        for(j=1;j<=i/2;j++){
            if(i%j==0)
            s=s+j;
        }
        if(s==i){
            printf("%d=",i);
            for(k=1;k<=i/2;k++){
                if(k==i/2){
                    printf("%d\n",k);
                }
                else if(i%k==0){
                    printf("%d+",k);
                }
            }
        }
    }
    return 0;
}


运行结果
啊啊啊啊啊

matlab实现

代码

clc;clear all;close all;

for i=1:2000
    s=0;
    for j=1:i/2
        if mod(i,j)==0
            s=s+j;
        end
    end
    if s==i
        fprintf('%d=',i);
        for k=1:i/2
            if k==i/2
                fprintf('%d\n',k);
            elseif mod(i,k)==0
                fprintf('%d+',k);
            end
        end
    end
end

运行结果

在这里插入图片描述

本人太过小白,如有不足之处还望指出。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值