题意:给出 n,问 n ! 的因子的因子的个数和。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+7,mod=1e7+7;
int primes[N], cnt; // primes[]存储所有素数
bool st[N]; // st[x]存储x是否被筛掉
void get_primes(int n)
{
for (int i = 2; i <= n; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i;
for (int j = 0; primes[j] <= n / i; j ++ )
{
st[primes[j] * i] = true;
if (i % primes[j] == 0) break;
}
}
}
ll cal(ll n,ll p)
{
ll ans=0;
while(n)
{
ans+=n/p;
n/=p;
}
return ans;
}
int main()
{
get_primes(N);
ll n;
while(scanf("%lld",&n)!=EOF)
{
if(n==0) break;
ll res=1;
for(int i=0;i<cnt;i++)
{
ll y=primes[i];
ll ans=cal(n,y);
res=(res*((ans+1)*(ans+2)/2))%mod;
}
printf("%lld\n",res);
}
}