You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求小于n的自然数中约数和最大数的C语言程序编写求助

解决方案

要完成这个作业,你需要把单个数字的约数查找逻辑封装成计算约数和的函数,然后遍历所有小于输入n的自然数,对比它们的约数和,找出最大值对应的数。以下是完整实现:

完整代码

#include <stdio.h>

// 计算一个数的所有真约数之和(真约数:小于该数且能整除它的数)
int sum_of_divisors(int num) {
    int sum = 0;
    for (int i = 1; i < num; i++) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return sum;
}

int main() {
    int n;
    printf("Input an integer: ");
    scanf("%d", &n);

    // 处理边界情况:n=1时没有小于它的自然数
    if (n <= 1) {
        printf("No valid number exists.\n");
        return 0;
    }

    int max_sum = 0;
    int result_num = 1;

    // 遍历所有小于n的自然数
    for (int i = 1; i < n; i++) {
        int current_sum = sum_of_divisors(i);
        // 如果当前数的约数和更大,更新最大值和对应的数
        if (current_sum > max_sum) {
            max_sum = current_sum;
            result_num = i;
        }
    }

    printf("The number with the largest sum of divisors less than %d is: %d\n", n, result_num);
    return 0;
}

代码说明

  1. sum_of_divisors函数:接收一个整数num,遍历从1到num-1的所有数,累加能整除num的数,返回最终的约数和。
  2. 主函数逻辑:
    • 先处理边界输入(比如n=1时没有符合要求的自然数)
    • 初始化max_sum(记录当前找到的最大约数和)和result_num(记录对应数)
    • 遍历1到n-1的每个数,计算其约数和,若大于当前max_sum则更新记录
    • 最后输出结果

测试示例

输入10时,程序会计算每个数的约数和:

  • 1: 1
  • 2: 1
  • 3: 1
  • 4: 1+2=3
  • 5: 1
  • 6: 1+2+3=6
  • 7: 1
  • 8: 1+2+4=7
  • 9: 1+3=4

最大约数和为7,对应的数是8,与题目示例一致。

内容的提问来源于stack exchange,提问作者ThomasMarkoW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:27