#include <iostream> #include <cmath> #include <vector> using namespace std; vector<int> getzys(int N) { //筛选出小于等于根号n的所有素数,大于根号n的素数最多只有一个,不需要知道是什么,只需要判断除以全部小于等于根号n的质因子后是否还大于1 int MAX = sqrt(1e9) + 1; bool nums[MAX]; vector<int> ans; for (int i = 0; i < MAX; i++) { nums[i] = true; } nums[0] = nums[1] = false; for (int i = 2; i < MAX; i++) { if (!nums[i]) continue; ans.push_back(i);//保存素数 for (int j = i * i; j < MAX; j += i) { nums[j] = false; } } return ans; } int main() { int n; vector<int> zys = getzys(n); while (cin >> n) { // 注意 while 处理多个 case // cout << a + b << endl; int count = 0; int bound = sqrt(n);//大于根号n的质因数最多只有一个 for (int i = 0; i < zys.size()&&zys[i]<=bound ; i++) { int temp = zys[i]; while (n % temp == 0) { count++; n /= temp; } } if (n > 1) count++; cout << count << endl; } } // 64 位输出请用 printf("%lld")