正整数因数个数的快速求法
以72为例,将72进行质因数分解,72 = 2*2*2*3*3 = 2^3 * 3^2
将底数2的幂次和底数3的幂次分别加1再相乘
得到72的因数个数 = (3+1) * (2+1) = 12
对特殊的数如 1,质数均成立
C语言刚入门,水平有限
#include<stdio.h>
int fact_countf(int test);
int main(int argc, char **argv) {
int test = 0;
scanf_s("%d", &test);
int len = fact_countf(test);
printf("%d ", len); //输出因数个数
return 0;
}
/*
* 正整数因数个数的快速求法
* 以72为例,将72进行质因数分解,72 = 2*2*2*3*3 = 2^3 * 3^2
* 将底数2的幂次和底数3的幂次分别加1再相乘
* 得到72的因数个数 = (3+1) * (2+1) = 12
* 对特殊的数如 1,质数均成立
*/
int fact_countf(int test) {
int i = 2; //初始化第一个质数2
int count = 1; //因为最后因子个数是乘积,所以初始化为1
do {
int power = 0; //每一个相同质因数的幂次初始化为0
while (test % i == 0) {
test /= i;
power++; //重复进入while循坏说明质因数是同一个,就增加一个幂次
//printf("%d ", i); //测试用代码
}
//printf("count = %d\n", power); //测试用代码
count *= (power + 1); //退出while循环就计算一次count
i++; //测试下一个数
} while (test != 1);
//printf("%d", len); //测试用代码
return count;
}