📅  最后修改于: 2023-12-03 15:14:25.978000             🧑  作者: Mango
本程序要求编写一个函数,实现将一个正整数分解质因数的功能。
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;
}
}