AtCoder - 2286 (数论——唯一分解定理)

烂漫一生 提交于 2019-12-04 06:38:25

题意

求n!的因子数%1e9+7。

思路

由唯一分解定理,一个数可以拆成素数幂之积,即2^a * 3^b *……,n!=2*3*……*n,所以计算每个素因子在这些数中出现的总次数(直接对2~n素因子分解即可),再用唯一分解定理公式,因子数=(a+1)*(b+1)*……。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int a[N];
int main()
{
    std::ios::sync_with_stdio(false);
    ll n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        int ii=i;
        for(int j=2;j<=i;j++)
        {
            while(ii%j==0)
            {
                a[j]++;
                ii/=j;
            }
        }
    }
    ll ans=1;
    for(int i=2;i<=n;i++)
    {
    //    cout<<a[i]<<endl;
        ans=(ans*(a[i]+1))%mod;
    }
    cout<<ans<<endl;
    return 0;
}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!