对于每个 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 printf
using 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;
}