📜  C测验– 110 |问题1(1)

📅  最后修改于: 2023-12-03 15:14:25.978000             🧑  作者: Mango

C测验-110 | 问题1

简介

本程序要求编写一个函数,实现将一个正整数分解质因数的功能。

函数定义
void decompose(int num, int factors[], int * count);

函数接受三个参数:

  • num: 待分解的正整数
  • factors: 存放返回结果的数组,其中第一个元素为分解出的第一个质因数,第二个元素为第二个质因数,以此类推。
  • count: 返回的质因数个数的指针。

函数没有返回值。

参数要求
  • num 大于1且小于等于1e6。
  • factors 数组长度不小于分解出的质因子个数。
  • count 指针指向的变量初值为0,返回时值为分解质因子的个数。
示例
int num = 24;
int factors[10];
int count;

decompose(num, factors, &count);

// 执行后,factors 应该为 [2, 2, 2, 3], count 应该为 4。
实现思路

本程序的实现需要用到的数学知识是质因数分解。首先通过试除法找到第一个质因子,然后不断用这个质因子除以待分解数,将得到的商继续分解,直到剩下的数为1.

在实现时,可以使用一个循环,不断判断当前待分解数(初值为num)能否被一个素数整除。若能,则将该素数存入数组factors中,将分解数除以该素数,然后继续判断能否被该素数整除;否则素数自增,直到找到下一个素数。

循环结束后剩下的待分解数(如果不为1)即为最后一个质因数,也需要加入到数组中,并向count变量添加1.

参考代码
#include <stdio.h>

void decompose(int num, int factors[], int * count) {
    int prime = 2;
    while (num > 1 && *count < sizeof(factors)/sizeof(factors[0])) {
        if (num % prime == 0) {
            factors[(*count)++] = prime;
            num /= prime;
        } else {
            prime++;
        }
    }

    // 最后一个因数
    if (num > 1 && *count < sizeof(factors)/sizeof(factors[0])) {
        factors[(*count)++] = num;
    }
}