求数n和n!的因子和

来源:互联网 发布:现在java主流框架 编辑:程序博客网 时间:2024/05/21 03:58

对于每个 n>=2, 都可以拆分成

n=2a+3b+5c+7d+...

有了上面的拆分式,我们就容易得到 n 的因子和公式
sum=(a+1)(b+1)(c+1)...

有了n 的因子和公式,就不难得出n!的因子和公式
sum=i=1n(a+1)i=1n(b+1)i=1n(c+1)...

下面贴一道我写过的题来巩固一下 AtCoder 2286

代码:

/*2017/04/05 13:21*/#include <iostream>#include <algorithm>#include <cstdlib>#include <cstring>#include <cstdio>#include <string>#include <math.h>#include <unordered_map>#include <map>#include <set>#define sc scanf#define pr printfusing namespace std;typedef long long ll;const ll MOD = 1000000000+7;;unordered_map<int,int> factor;int main(){    int n;    while(~sc("%d",&n))    {        factor.clear();        for(int i=2; i<=n; i++)        {            int t = i;            for(int j=2; j<=t; j++)            {                while(t % j == 0)                {                    factor[j]++; t /= j;                }            }            if(t != 1) factor[t]++;        }        ll ans = 1;        for(auto index : factor)            ans = (ans*(index.second+1))%MOD;        cout<<ans<<endl;    }    return 0;}
0 0
原创粉丝点击