方法一:对于每个输入都通过遍历方式寻找质因数

#include <stdio.h>
#include <cmath>

int main()
{
    int s,i,count;
    while(scanf("%d",&s)!=EOF)
    {
        count=0;
        int bound=sqrt(s);
        for(i=2;i<=bound;i++)
        {
            while(s%i==0)
        {
            count++;
            s=s/i;
        }
    }
        if(s>1)
            printf("%d\n",count+1);
        else 
            printf("%d\n",count);

    }
    return 0;
}

方法二:首先通过一维数组筛选出全部素数

#include <initializer_list>
#include <iostream>
#include "vector"
#include "cmath"
using namespace std;

int main() {
    int N;
    int MAXN = sqrt(1e9) + 1;
    vector<int> prime;
    bool isPrime[MAXN];

    for (int i = 0; i < MAXN; i++) {
        isPrime[i] = true;
    }
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i < MAXN; i++) {
        if (!isPrime[i]) {
            continue;
        }
        prime.push_back(i);
        for (int j = i * i; j < MAXN; j += i) {
            isPrime[j] = false;
        }
    }
    while (cin >> N) { // 注意 while 处理多个 case
        // cout << a + b << endl;

        int num = 0;
        for (int i = 0; i < prime.size() && prime[i] < N; i++) {
            int zys = prime[i];
            while (N % zys == 0) {
                N /= zys;
                num++;
            }
        }
        if (N > 1) num++;
        cout << num << endl;
    }
}
// 64 位输出请用 printf("%lld")