logo头像

往者不可谏,来者犹可追。

清华-05-质因数的个数

题目描述

求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=22235,共有5个质因数。


输入描述:

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。


输出描述:

对于每组数据,输出N的质因数的个数。


示例1

输入
120
输出
5


分析

质因数的个数。首先看到数据是正数范围内,所以不考虑大数问题。在处理质因数的时候,一个质因数可能出现多次,所以把一个质因数消完再找下一个。


代码

  1. 未处理,超时

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //超时
    int solution(int n) {
    int ans = 0;
    while(n!=1){
    for(int i = 2; i <= n; i ++){
    if(n%i==0){
    ans++;
    n /= i;
    break;
    }
    }
    }
    return ans;
    }
  2. 修改后

1
2
3
4
5
6
7
8
9
10
11
12
13
//通过
int solution(int n) {
int ans = 0;
for(int i = 2; i <= sqrt(n); i ++) {
while(n%i==0) {
n=n/i;
ans++;
}
if(n<=1) break;
}
if(n>1) ans++;
return ans;
}
上一篇