一、题目
二、解法
考虑把 n n n质因数分解,那么我们只需要考虑单个质因数的情况即可,不难发现对于一个质数 p p p,次数有 c n t cnt cnt,有 2 c n t + 1 2cnt+1 2cnt+1种的选取方案,两者之间必须有一个选到 p c n t p^{cnt} pcnt,然后我们使用乘法原理,把每个质因数的方案乘起来就行了,时间复杂度 O ( n ) O(\sqrt n) O(n)。
#include <cstdio>
#define int long long
int read()
{
int x=0,flag=1;
char c;
while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*flag;
}
int n,cnt,ans=1;
signed main()
{
n=read();
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
cnt=0;
while(n%i==0) n/=i,cnt++;
ans*=(2*cnt+1);
}
}
if(n>1) ans*=3;
printf("%lld\n",ans);
}