质因数分解是将一个合数分解为若干个质数的乘积。以下是一个简单的算法,用于计算一个正整数N的质因数个数:
初始化计数器 :设一个计数器`count`为0,用于记录质因数的个数。遍历可能的因数:
从2开始,遍历到N的平方根(包括平方根),检查N是否能被这些数整除。
更新N和计数器:
如果N能被当前遍历到的数整除,则将N除以这个数,并将计数器加1。重复此步骤,直到N不能被当前遍历到的数整除为止。
处理剩余的N:
如果遍历结束后,N大于1,则N本身是一个质数,将计数器加1。
```c
include include int count_prime_factors(int N) { int count = 0; for (int i = 2; i <= sqrt(N); i++) { if (N % i == 0) { count++; N = N / i; } } if (N > 1) { count++; } return count; } int main() { int N; while (scanf("%d", &N) != EOF) { printf("%d\n", count_prime_factors(N)); } return 0; } ``` 解释 `count_prime_factors`函数 接受一个整数`N`作为参数。 初始化计数器`count`为0。 从2遍历到`sqrt(N)`,检查`N`是否能被这些数整除。 如果能整除,则将`N`除以这个数,并将计数器加1。 重复此步骤,直到`N`不能被当前遍历到的数整除为止。 如果遍历结束后,`N`大于1,则`N`本身是一个质数,将计数器加1。 返回计数器的值。 从标准输入读取一个整数`N`。 调用`count_prime_factors`函数计算`N`的质因数个数,并输出结果。 循环读取多个测试数据,直到输入结束。 这个算法的时间复杂度是O(sqrt(N)),因为每次迭代都将N除以一个数,最多需要sqrt(N)次迭代。`main`函数