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;
}
相比之下用注释跑的初始化会更快一些