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

C语言如何输出给定正整数的最小和最大真因数?

实现思路

你之前拼接因数取数位的方案存在逻辑缺陷,无需采用这种方式,直接在遍历查找真因数的过程中同步记录最小、最大真因数即可:

  • 最小真因数就是你从小到大遍历时第一个匹配到的真因数
  • 最大真因数就是遍历过程中最后一个匹配到的真因数,也可以通过 n / 最小真因数 直接计算得到
  • 同时你原来的代码做了两次无意义的全量遍历,可合并为一次遍历完成所有逻辑,提升执行效率

修改后的完整代码

#include <stdio.h>

int main() {
  int n, divisor, smallest, biggest, count = 0;

  scanf("%d", &n);
  // 初始化边界值
  smallest = n;
  biggest = 1;

  // 单次遍历完成真因数查找、最小/最大值记录、计数
  for (divisor = 2; divisor < n; divisor++) {
    if (n % divisor == 0) {
      printf("%d is divisor of %d\n", divisor, n);
      count++;
      // 更新最小真因数
      if (divisor < smallest) {
        smallest = divisor;
      }
      // 更新最大真因数
      if (divisor > biggest) {
        biggest = divisor;
      }
    }
  }

  if (count == 0) {
    printf("The number does not have proper divisors(it is prime)\n");
  } else {
    printf("Smallest proper divisor: %d\n", smallest);
    printf("Biggest proper divisor: %d\n", biggest);
  }

  return 0;
}

代码说明

  1. 初始给smallest赋值为n(所有真因数都小于n,只要找到匹配的因数就会更新这个值),给biggest赋值为1(所有真因数都大于1,只要找到匹配的因数就会更新这个值)
  2. 合并两次遍历为一次,在找到真因数时同步更新计数、最小/最大真因数三个变量
  3. 最终通过计数判断是否为质数,如果存在真因数直接输出已经记录好的最小、最大真因数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:04