1.素数筛法选出所有的素数(防止超时)【理论上也可以从2一直遍历到sqrt(n),判断整除的同时判断是否为素数,在判断指数】
2.统计素因数的个数以及指数
3.整数n最多存在1个质因数大于sqrt(n);
#include<bits/stdc++.h>
using namespace std;
int primeSize;
int mark[100001];
int prime[100001];
void init(){
memset(mark,0,sizeof(mark));
primeSize=0;
for(int i=2;i<=100000;i++){
if(mark[i]==1){
continue;
}
prime[primeSize++]=i;
if(i>=10000){
continue;
}
for(int j=i*i;j<100001;j+=i){
mark[j]=1;
}
}
}
int main(){
int n;
init();
while(scanf("%d",&n)!=EOF){
if(n==1){
printf("1\n");
continue;
}
int ansSize=0;
int ansNum[50];
int ansPrime[50];
for(int i=0;i<primeSize;i++){
if(n%prime[i]==0){
ansPrime[ansSize]=prime[i];
ansNum[ansSize]=0;
while(n%prime[i]==0){
ansNum[ansSize]++;
n/=prime[i];
}
ansSize++;
if(n==1){
break;
}
}
}
if(n!=1){
ansPrime[ansSize]=n;
ansNum[ansSize++]=1;
}
int ans=0;
for(int i=0;i<ansSize;i++){
//cout<<ansPrime[i]<<" "<<ansNum[i]<<endl;
ans+=ansNum[i];
}
printf("%d\n",ans);
}
return 0;
}