方法一:对于每个输入都通过遍历方式寻找质因数
#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")

京公网安备 11010502036488号