打素数表
普通的打法很多时候不太行
void Seekprime()
{
memset(isp,1,sizeof(isp));
isp[0]=isp[1]=0;
cnt=0;
for(int i=2;i<=maxn;i++)
{
if(isp[i])
pri[cnt++]=i;
for(int j=0;j<cnt&&i*pri[j]<maxn;j++)
{
isp[i*pri[j]=0;
if(i%pri[j]==0)
break;//优化
}
}
}
计算n!的质因子p的幂
int cal(ll p,ll n)
{if(n==0)
return 0;
else return cal(p,n/p)+n/p;}
非函数写法
for (int i=1;i<=cnt;i++)
{if(pri[i]>n)
break;
int nn=n;
while(nn)
{cnt[i]=cnt[i]+nn/pri[i];
nn/=pri[i];}}
#include <bits/stdc++.h>
#define mod 10007
#define maxn 10000000+10
#define maxp 800010
using namespace std;
int n,prime[maxn],p[maxp],is[maxp];
int cnt=1;
void isprime()
{
memset(prime,1,sizeof(prime));
prime[0]=prime[1]=0;
for(int i=2;i<=maxn;i++)
{
if(prime[i])
is[cnt++]=i;
for(int j=1;j<cnt&&is[j]*i<maxn;j++)
{prime[is[j]*i]=0;
if(i%is[j]==0)
break;}
}
}
void Exp(int n)
{
memset(p,0,sizeof(p));
for (int i=1; i<cnt; i++)
{
if (is[i]>n)
break;
int nn=n;
while (nn)
{
p[i]=(p[i]+nn/is[i])%mod;
nn/=is[i];
}
}
}
int main()
{
int t;
isprime();
cin>>t;
while(t--)
{
cin>>n;
Exp(n);
int ans=1;
for(int i=1; i<cnt; i++)
//if(p[i]!=0)
ans=ans%mod*(p[i]+1)%mod;
cout<<ans<<endl;
}
return 0;
}
因子的个数等于(p【i】+1)的乘积