const int N=1e6+5;
int n,m;
double t;
int i,j,k;
int id[N],prime[N],num;//id[i] 表示i的最小质因数在素数表中的位置
int cnt[N];//计算
void init()
{
for(int i=2;i<N;i++){
if(!id[i]){
prime[++num]=i; id[i]=num;
for(int j=i*2;j<N;j+=i){
if(!id[j]) id[j]=num;
}
}
}
}
/*void init()
{
for(int i=2;i<N;i++){
if(!id[i]){ prime[++num]=i; id[i]=num; }
for(int j=1;j<=num && prime[j]*i<N;j++){
id[i*prime[j]]=j;
if(i%prime[j]==0) break;
}
}
}*/
void go(int x)
{
while(x!=1){
cnt[id[x]]++;//用到了第 id[x] 位素数
x/=prime[id[x]];
}
}
int main()
{
//IOS;
init();
while(sd(n)==1){
for(int i=2;i<=n;i++) go(i);
ll ans=1;
for(i=1;i<=num;i++){
ans=(ans*(cnt[i]*2%mod+1))%mod;
}
cout<<ans<<endl;
return 0;
}
//PAUSE;
return 0;
}
相比之下用注释跑的初始化会更快一些