Factors of Factorial - AtCoder arc067_a - Virtual Judge (vjudge.net)
比如36=2^2*3*2
约数个数是:(2+1)*(2+1)=9
然而此题需要求N!的因子个数,绝不可能算出N!
方法是只需要对2-N范围内分解质因数 存入数组 就可以
#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
int a[10000001];
int n;
int ans = 1;
const int N = 1E9 + 7;
void solve()
{
for (int i = 2; i <= n; i++)
{
int temp = i;//从2-N
for (int j = 2; j <= i; j++)
{
while (temp % j == 0)//分解质因数
{
a[j]++;
temp /= j;
}
}
}
for (int i = 2; i <= n; i++)
{
if (a[i]!=0)
{
ans *= (1 + a[i]);
ans %= N;
}
}
cout << ans % N << endl;
}
signed main()
{
cin >> n;
solve();
return 0;
}