原题:
题目描述: 求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。 输出: 对于每组数据,输出N的质因数的个数。 样例输入: 120样例输出: 5提示: 注意:1不是N的质因数;若N为质数,N是N的质因数。
解题代码:
C语言代码
#include <stdio.h> #include <stdlib.h> int main() { int n; while((scanf("%d",&n))!=EOF) { printf("%d\n",fun(n)); } return 0; } int fun(int n) { int s = 0, m = n, i = 2, j = (int)sqrt(n); while(i<=j)//j为n的平方根,缩减范围 { if(m%i == 0) { m = m/i;//注意i一定会是质因数 s++;//质因数增加1 if(m==1) break;//恰好整除完了 continue;//否则继续用i去整除n } i++; } if(m>1 && m<n) { s++;//还有一个大于平方根的质因数 } if(m == n) { s = 1; } return s; }