Subtask #0,Subtask #1 全对,但是Subtask #2就过4个点
#include<bits/stdc++.h>
using namespace std;
long long n;
int cnt,len;
//素数筛变量
const int N=1000000;
long long prime[1000010];
bool vis[1000010];
//分解质因数变量
long long yin[1000010],num[1000010];
int main()
{
scanf("%lld",&n);
//分解质因数
vis[0]=vis[1]=1;
for(int i=2;i<=N;i++)
{
if(vis[i]==0) prime[++cnt]=i;
for(int j=1;j<=cnt;j++)
{
if(i*prime[j]>N) break;
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=cnt;i++)
{
if(n%prime[i]!=0) continue;
len++;
yin[len]=prime[i];
while(n%prime[i]==0)
num[len]++,n/=yin[len];
if(n==1) break;
}
//分解质因数结束
long long ans=0;
for(int i=1;i<=len;i++)
{
long long l=1,r=1e9,ans1;
while(l<=r)
{
long long mid=(l+r)/2;
if(mid*(mid+1)/2<=num[i])
{
ans1=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
ans+=ans1;
}
printf("%lld",ans);
return 0;
}