根据唯一分解定理,一个数字可以分解为多个质数的幂的乘积。
所以想知道一个数有多少个约数,首先:
1、要知道它是由哪些质数的幂构成的
2、它的每一个约数都可以由这些质数的幂(可能是0次) 的乘积构成
3、这样就可以通过组合数 算出约数的个数
约数个数(a1+1)*(a2+1)*(a3+1)*……*(an+1)
结论:
code
//分解质因数
unordered_map<int,int>mp;
void divide(int x)
{
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
mp[i]++;
}
}
if(x>1) mp[x]++;
}
//计算组合数
void solve()
{
int n;
int ans=1;
cin>>n;
for(int i=1;i<=n;i++)
{
divide(i);
}
for(auto i:mp) ans=ans*(i.second+1);
cout<<ans<<endl;
return;
}