解题思路:就是分解质因数,先用素数筛获得n可能的质因数,然后对输入n进行质因数分解。然后对这些数进行简单的排列组合。代码很短,稍微看一下就懂了
#include<cstdio>
#include<cstring>
#define N 1000005
using namespace std;
typedef long long ll;
ll ans;
int prime[N],vis[N],cnt=0,s[N];
void get_prime()
{
for(int i=2;i<N;i++)
{
if(!vis[i])
{
vis[i]=1;
for(int j=i+i;j<N;j+=i)
{
vis[j]=1;
}
prime[cnt++]=i;
}
}
}
int main()
{
//freopen("t.txt","r",stdin);
get_prime();
ll n,t,r;
int k;
while(scanf("%lld",&n)!=EOF)
{
k=0;
for(ll i=0;prime[i]*prime[i]<=n&&i<cnt;i++)
{
if(n%prime[i]==0)
{
t=0;
while(n%prime[i]==0)
{
n/=prime[i];
t++;
}
s[k++]=t;
}
}
if(n!=1)
{
s[k++]=1;
}
ans=1;
for(int i=0;i<k;i++)
{
r=0;
for(int j=0;j<=s[i];j++)
{
r+=(j+1)*(s[i]-j+1);
}
ans*=r;
}
printf("%lld\n",ans);
}
return 0;
}